2012-01-24 30 views
0

如果有人幫助解決這個問題,我將不勝感激。在excel下面有一個用戶定義函數的簡短代碼。
我在命名列(在一個大的電子表格中)來計算SUMIFS的計算。如果我想在另一個用戶自定義函數中使用相同的列命名並使用變量WRITEOFF1WRITEOFF「,我該怎麼做?我已經嘗試在子例程中設置列的名稱(在同一個VBA項目和模塊中)然後試圖調用子程序,但看起來像我不能名字傳遞到另一個功能。調用用戶定義函數中的子例程和值(Excel)

有人可以用一個解決方案幫助?在此先

非常感謝。


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

當您嘗試運行這個會發生什麼?你是否收到錯誤信息? – Justin

+0

嗨Jmax,該函數的工作原理,我想在這個函數中使用範圍名稱和WRITEOFF1和WRITEOFF2在另一個函數中的值。我不打算重新輸入所有代碼,而是查看是否可以記住範圍名稱和兩個值。那可能嗎? – Fred

+0

不完全明白你在找什麼。你想將命名的範圍名稱傳遞給另一個UDF?爲什麼不只是將名稱作爲參數添加並在輸入公式時輸入它?那是你在找什麼? – Jon49

回答

0

你應該c將它們作爲命名範圍來使用,它們將跨越函數保留它們,但也會將它們暴露爲可以直接在Worksheet上使用的範圍。從公式絲帶,名稱管理器,新

插入指定範圍:

Name Manager

在VBA中,你提到他們喜歡:

x = Application.WorksheetFunction.Sum(Order_Type) 

在工作表上,您也可以參考他們在一個單元格中:

=(Sum(Order_Type))=VLOOKUP("Steve",Order_Type,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 
相關問題