是否有可能或希望將對象/數據設置爲「空」或「缺失」變體? 我希望能夠有條件地將可選參數傳遞給函數。有時我想使用可選的參數,有時候我不會。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)
存在VBA函數叫做ISMISSING()用於評估可選參數http://msdn.microsoft.com/en-us/library/office/gg251721(v=office.15)。 aspx – Horaciux 2014-09-24 20:00:46
我不完全確定這是你正在尋找的東西,但你有沒有檢查過[ParamArray](http://www.tushar-mehta.com/publish_train/xl_vba_cases/1005%20ParamArray.shtml)?它是'Variant'類型的,你可以檢查它是否爲空,並且使用任意數量的元素。 – Ioannis 2014-09-24 20:01:03
除了ParamArray之外,您還可以使用Optional關鍵字,此外還可以選擇設置默認值;取決於變量的類型,您可以通過IsMissing進行測試;沒什麼; IsEmpty(如果您可以選擇將Variant設置爲空)等。 – 2014-09-24 20:12:11