![](/img/trans.png)
[英]Calling an Excel user defined function from Python always returns None
[英]Calling Subroutines and values in a User Defined Function (Excel)
如果有人幫助您解決一個簡單的解決方案,我將不勝感激。 下面有一個excel中用戶定義函數的簡短代碼。
我正在命名列(在大型電子表格中)以在SUMIFS
計算中進行計算。 如果要命名相同的列,並在另一個用戶定義函數中使用變量WRITEOFF1
和WRITEOFF
,該怎么辦?我嘗試在子例程(在同一VBA項目和模塊中)中設置列的名稱。然后嘗試調用該子例程,但是看起來我無法將名稱傳遞給另一個函數。
有人可以提供解決方案嗎?
提前謝謝了。
Public Function WRITEOFF(rev_date As Variant) As Variant
Application.Volatile (True)
Set Order_Type = Sheets("KRONOS").Range("$D:$D")
Set Final_Price = Sheets("KRONOS").Range("$H:$H")
Set PaidAlt = Sheets("KRONOS").Range("$I:$I")
Set Excl_Rev = Sheets("KRONOS").Range("$K:$K")
Set PAmount1 = Sheets("KRONOS").Range("$O:$O")
Set First_PD = Sheets("KRONOS").Range("$Q:$Q")
Set PMethod1 = Sheets("KRONOS").Range("$R:$R")
Set PAmount2 = Sheets("KRONOS").Range("$T:$T")
Set PayDate2 = Sheets("KRONOS").Range("$V:$V")
Set PMethod2 = Sheets("KRONOS").Range("$W:$W")
Set PAmount3 = Sheets("KRONOS").Range("$Y:$Y")
Set PayDate3 = Sheets("KRONOS").Range("$AA:$AA")
Set PMethod3 = Sheets("KRONOS").Range("$AB:$AB")
Set PAmount4 = Sheets("KRONOS").Range("$AD:$AD")
Set PayDate4 = Sheets("KRONOS").Range("$AF:$AF")
Set PMethod4 = Sheets("KRONOS").Range("$AG:$AG")
Set Vstatus = Sheets("KRONOS").Range("$DL:$DL")
Set Team = Sheets("KRONOS").Range("$DO:$DO")
WRITEOFF1 = Application.WorksheetFunction.SumIfs( _
PAmount1 _
, Team, "<>9" _
, Vstatus, "<>rejected", Vstatus, "<>unverified" _
, First_PD, rev_date _
, PMethod1, "Write Off")
WRITEOFF2 = Application.WorksheetFunction.SumIfs( _
PAmount2 _
, Team, "<>9" _
, Vstatus, "<>rejected", Vstatus, "<>unverified" _
, PayDate2, rev_date _
, PMethod2, "Write Off")
WRITEOFF3 = Application.WorksheetFunction.SumIfs( _
PAmount3 _
, Team, "<>9" _
, Vstatus, "<>rejected", Vstatus, "<>unverified" _
, PayDate3, rev_date _
, PMethod3, "Write Off")
WRITEOFF4 = Application.WorksheetFunction.SumIfs( _
PAmount4 _
, Team, "<>9" _
, Vstatus, "<>rejected", Vstatus, "<>unverified" _
, PayDate4, rev_date _
, PMethod4, "Write Off")
WRITEOFF = WRITEOFF1 + WRITEOFF2 + WRITEOFF3 + WRITEOFF4
End Function
您應該將它們創建為“命名范圍”,這樣既可以保留它們在各個函數之間的作用,又可以將它們公開為可以在工作表上直接使用的范圍。
從“公式”功能區,“名稱管理器”,“新建”中插入“命名范圍”:
在VBA中,您對它們的引用類似於:
x = Application.WorksheetFunction.Sum(Order_Type)
在工作表上,您還可以在單元格中引用它們:
=(Sum(Order_Type))
或=VLOOKUP("Steve",Order_Type,2,False)
等
如果您不想使用命名范圍,請將變量設置為Public,然后在Function中,調用子例程來分配范圍:
Public Order_Type As Range
Public Final_Price As Range
Function MyFunction()
'Call procedure to set the public variables
SetPublicVars
'Perform your function
MyFunction = Application.WorksheetFunction.Sum(Order_Type)
End Function
Private Sub SetPublicVars()
Set Order_Type = Sheets(1).Range("D:D")
Set Final_Price = Sheets(1).Range("H:H")
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.