簡體   English   中英

在用戶定義函數(Excel)中調用子例程和值

[英]Calling Subroutines and values in a User Defined Function (Excel)

如果有人幫助您解決一個簡單的解決方案,我將不勝感激。 下面有一個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

您應該將它們創建為“命名范圍”,這樣既可以保留它們在各個函數之間的作用,又可以將它們公開為可以在工作表上直接使用的范圍。

從“公式”功能區,“名稱管理器”,“新建”中插入“命名范圍”:

名字經理

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM