2014-09-24 16 views
0

是否有可能或希望將對象/數據設置爲「空」或「缺失」變體? 我希望能夠有條件地將可選參數傳遞給函數。有時我想使用可選的參數,有時候我不會。VBA:將變量設置爲「Empty」或「Missing」?處理多個可選參數?

在Python中,通過使用** kwdargs將字典或列表解壓縮到函數參數中,您可以輕鬆地通過所需的任意參數。有沒有類似的東西(或者在VBA中破解它的方法),所以你可以傳入Empty/Missing可選參數?

特別是,我試圖用任意數量的參數使用Application.Run

編輯

基本上,我想這樣做:

Public Function bob(Optional arg1 = 0, Optional arg2 = 0, Optional arg3 = 0, Optional arg4 = 0) 
    bob = arg1 + arg2 + arg3 + arg4 
End Function 

Public Function joe(Optional arg1) 
    joe = arg1 * 4 
End Function 


Public Sub RunArbitraryFunctions() 
    'Run a giant list of arbitrary functions pseudocode 

    Dim flist(1 To 500) 
    flist(1) = "bob" 
    flist(2) = "joe" 
    flist(3) = "more arbitrary functions of arbitrary names" 
    flist(N) = ".... and so on" 

    Dim arglist1(1 To 4)  'arguments for bob 
    Dim arglist2(1 To 1)  'arguments for joe 
    Dim arglist3(1 To M number of arguments for each ith function) 


    For i = 1 To N 
     'Execute Application.Run, 
     'making sure the right number of arguments are passed in somehow. 
     'It'd also be nice if there was a way to automatically unpack arglisti 
     Application.Run flist(i) arglisti(1), arglisti(2), arglisti(3), .... 
    Next i 

End Sub 

因爲每個函數調用的參數變化的數量,什麼是確保正確的數量可以接受的方式的輸入被輸入到Application.Run?

等效Python代碼將

funclist = ['bob', 'joe', 'etc'] 
arglists = [[1,2,3],[1,2],[1,2,3,4,5], etc] 

for args, funcs in zip(arglists, funclist): 
    func1 = eval(funcs) 
    output = func1(*args) 
+1

存在VBA函數叫做ISMISSING()用於評估可選參數http://msdn.microsoft.com/en-us/library/office/gg251721(v=office.15)。 aspx – Horaciux 2014-09-24 20:00:46

+1

我不完全確定這是你正在尋找的東西,但你有沒有檢查過[ParamArray](http://www.tushar-mehta.com/publish_train/xl_vba_cases/1005%20ParamArray.shtml)?它是'Variant'類型的,你可以檢查它是否爲空,並且使用任意數量的元素。 – Ioannis 2014-09-24 20:01:03

+2

除了ParamArray之外,您還可以使用Optional關鍵字,此外還可以選擇設置默認值;取決於變量的類型,您可以通過IsMissing進行測試;沒什麼; IsEmpty(如果您可以選擇將Variant設置爲空)等。 – 2014-09-24 20:12:11

回答

1

VBA您使用的ParamArray進入選項輸入功能。

Pearson Material

+1

+1。 ParamArray與Python的''kwargs'最接近(儘管它不是字典)。 – Ioannis 2014-09-24 20:06:04

相關問題