我目前正在處理一個模塊,它是爲了填充三個ActiveX列表框。每個元素都將使用相同的值進行填充:圖形上軸標題的選擇(X軸,主要Y軸和輔助Y軸)。我有一個名爲「FillBox」的函數,它將ListBox作爲參數並填充它。VBA Excel - 從函數返回一個ListBox的數組
原來我用下面來實現:
Sub FillAllBoxes()
FillBox X_BOX
FillBox Y1_BOX
FillBox Y2_BOX
End Sub
我被告知,我不能用一個聯盟來壓縮,因爲MSForms.ListBox對象類型的驗證碼。還有很多其他的子工具在每個盒子上執行重複的操作,所以看起來最好使用某種數組。
到目前爲止,我發現定義這個ListBox數組的唯一方法如下,但我不滿意返回值是Variant的事實,但我似乎無法讓它工作,如果我把它定義爲功能BOX_ARRAY()作爲MSForms.ListBox:
Function BOX_ARRAY() As Variant
Dim Temp(1 To 3) As MSForms.ListBox
Set Temp(1) = X_BOX
Set Temp(2) = Y1_BOX
Set Temp(3) = Y2_BOX
BOX_ARRAY = THIS_ARRAY
End Function
然後我就可以使用這個子,但我需要明確定義的參數FillBox以ByVal,因爲BOX_ARRAY是一個變體。
Sub FillAllBoxes()
For j = LBound(BOX_ARRAY) To UBound(BOX_ARRAY)
FillBox BOX_ARRAY(j)
Next j
End Sub
A)有什麼辦法讓函數返回一個不是Variant的數組嗎?
B)明智地堅持我的原始方法只是明確地重複每個列表框的功能,還是值得使用數組進行這種類型的操作?
C)在函數BOX_ARRAY是否有一種方法來定義一個Temp數組,並且只是將返回的數組填充到蝙蝠右邊?
如果你不喜歡'Variant',你可以把它變成'Collection',但是,你永遠不會在VBA中獲得一個強類型的數組/集合,我喜歡你的第一個解決方案,它是最少量的代碼和工作,對嗎? – Brad
它確實有效,但我討厭在代碼,所以我想我會分支到其他領域,希望得到一個更優雅的解決方案。謝謝你的提示。 – teepee
它只是幾乎沒有多餘的。他們的方式,你解決這個'冗餘'是寫*更多*代碼,這不應該是目標,它是清晰可讀的,因爲它傳遞陣列會使事情變得複雜,只有3個列表框,如果你有50個,它會是一個不同的故事 – Brad