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

时间:2012-01-24 12:16:55

标签: excel vba user-defined-functions

如果有人帮助解决这个问题,我将不胜感激。下面有一个excel中用户定义函数的简短代码 我正在命名列(在大型电子表格中)以便在SUMIFS计算中进行计算。如果我想要命名相同的列并在另一个用户定义函数中使用变量WRITEOFF1WRITEOFF“,我该怎么做?我已经尝试在子例程中设置列的名称(在同一个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

1 个答案:

答案 0 :(得分:0)

您应该将它们创建为命名范围,这将在函数中保留它们,但也会将它们公开为可以直接在工作表上使用的范围。

从公式功能区,名称管理器,新建:

插入命名范围

Name Manager

在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