在用户定义函数(Excel)中调用子例程和值
如果有人能帮助我解决这个问题,我将不胜感激。下面是excel中用户定义函数的简短代码。在用户定义函数(Excel)中调用子例程和值,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,如果有人能帮助我解决这个问题,我将不胜感激。下面是excel中用户定义函数的简短代码。 我正在命名要在SUMIFScalculation中计算的列(在大型电子表格中)。如果我想命名相同的列,并在另一个用户定义函数中使用变量WRITEOFF1和WRITEOFF,我该怎么做?我曾尝试在子例程中设置列的名称(在同一VBA项目和模块中)然后尝试调用子例程,但看起来我无法将名称传递给另一个函数 有人能帮忙解决吗 非常感谢 Public Function WRITEOFF(版本日期作为变量)作为变量 Ap
我正在命名要在
SUMIFS
calculation中计算的列(在大型电子表格中)。如果我想命名相同的列,并在另一个用户定义函数中使用变量WRITEOFF1
和WRITEOFF
,我该怎么做?我曾尝试在子例程中设置列的名称(在同一VBA项目和模块中)然后尝试调用子例程,但看起来我无法将名称传递给另一个函数
有人能帮忙解决吗
非常感谢
Public Function WRITEOFF(版本日期作为变量)作为变量
Application.Volatile(True)
设置订单类型=纸张(“克朗”)。范围($D:$D)
设定最终价格=纸张(“克朗”)。范围($H:$H)
Set PaidAlt=图纸(“克朗”)范围($I:$I)
集合Excl_Rev=板材(“克朗”)范围($K:$K)
设置PAmount1=纸张(“克朗”)。范围($O:$O)
设置首张图纸(“克朗”)。范围($Q:$Q)
设置PMethod1=图纸(“克朗”)范围($R:$R)
Set PAmount2=纸张(“克朗”)范围($T:$T)
设置付款日期2=张(“克朗”)。范围($V:$V)
设置PMethod2=图纸(“KRONOS”)。范围($W:$W)
设置PAmount3=纸张(“克朗”)。范围($Y:$Y)
设置付款日期3=张(“克朗”)。范围($AA:$AA)
设置PMethod3=图纸(“KRONOS”)。范围($AB:$AB)
Set PAmount4=纸张(“克朗”)。范围($AD:$AD)
设置付款日期4=张(“克朗”)。范围($AF:$AF)
设置PMethod4=纸张(“克朗”)范围($AG:$AG)
设置Vstatus=Sheets(“KRONOS”)。范围($DL:$DL)
设置团队=工作表(“克朗”)。范围($DO:$DO)
WRITEOFF1=Application.WorksheetFunction.SumIfs(_
PAmount1_
,小组,“9”_
,Vstatus,“拒绝”,Vstatus,“未验证”_
,首次发布,修订日期_
,PMethod1,“注销”)
WRITEOFF2=Application.WorksheetFunction.SumIfs(_
PAmount2_
,小组,“9”_
,Vstatus,“拒绝”,Vstatus,“未验证”_
,付款日期2,修订日期_
,PMethod2,“注销”)
WRITEOFF3=Application.WorksheetFunction.SumIfs(_
PAmount3_
,小组,“9”_
,Vstatus,“拒绝”,Vstatus,“未验证”_
,付款日期3,修订日期_
,PMethod3,“注销”)
WRITEOFF4=Application.WorksheetFunction.SumIfs(_
PAmount4_
,小组,“9”_
,Vstatus,“拒绝”,Vstatus,“未验证”_
,付款日期4,修订日期_
,PMethod4,“注销”)
WRITEOFF=WRITEOFF1+WRITEOFF2+WRITEOFF3+WRITEOFF4
端函数
您应该将它们创建为命名范围,这样可以跨函数保留它们,但也可以将它们公开为可直接在工作表上使用的范围
从“公式”功能区的“名称管理器”中插入命名范围,新建:
在VBA中,您可以这样引用它们:
x = Application.WorksheetFunction.Sum(Order_Type)
在工作表上,您还可以在单元格中引用它们:
=(总和(订单类型))
或=VLOOKUP(“Steve”,订单类型,2,False)
等
如果不希望使用命名范围,请将变量设置为Public,然后在函数中调用子例程以分配范围:
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
当您尝试运行此函数时会发生什么情况?是否收到错误消息?嗨,Jmax,函数正常工作,我希望在此函数中使用范围名称,并在另一个函数中使用WRITEOFF1和WRITEOFF2的值。我不想再次键入所有代码,而是想看看是否可以调用范围名称和两个值。这可能吗?不可能我不太明白您在寻找什么。您想将命名的范围名称传递给另一个UDF?为什么不添加名称作为参数,并在输入公式时输入它?这就是您想要的吗?抱歉,我显然没有正确解释自己。在上面的UDF“WRITEOFF”中“,我将冲销定义为冲销1、2、3和4的总和。我想在另一个名为“ANOTHERWRITEOFF”的UDF中使用WRITEOFF1的值。这是可能的,还是我需要在“另一个减记”自定义项中重新计算减记1。我希望这更清楚。
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