如果有人帮助解决这个问题,我将不胜感激。下面有一个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
答案 0 :(得分:0)
您应该将它们创建为命名范围,这将在函数中保留它们,但也会将它们公开为可以直接在工作表上使用的范围。
从公式功能区,名称管理器,新建:
插入命名范围
在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