Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在用户定义函数(Excel)中调用子例程和值_Excel_Vba_User Defined Functions - Fatal编程技术网

在用户定义函数(Excel)中调用子例程和值

在用户定义函数(Excel)中调用子例程和值,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,如果有人能帮助我解决这个问题,我将不胜感激。下面是excel中用户定义函数的简短代码。 我正在命名要在SUMIFScalculation中计算的列(在大型电子表格中)。如果我想命名相同的列,并在另一个用户定义函数中使用变量WRITEOFF1和WRITEOFF,我该怎么做?我曾尝试在子例程中设置列的名称(在同一VBA项目和模块中)然后尝试调用子例程,但看起来我无法将名称传递给另一个函数 有人能帮忙解决吗 非常感谢 Public Function WRITEOFF(版本日期作为变量)作为变量 Ap

如果有人能帮助我解决这个问题,我将不胜感激。下面是excel中用户定义函数的简短代码。
我正在命名要在
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