2014-09-21 83 views
2

我想找到一種實用的方法,直接將值分配給VBA中的多維數組而不進行迭代。我用Google搜索的解決方案哪種作品,但是當我嘗試與變量結合使用它失敗..VBA - 直接使用括號分配多維數組

這工作:

Sub SomeSub() 
    Dim vArray As Variant 
    Dim iCounter As Integer 
    vArray = [{"Zip", "22150";"City", "Springfield"; "State", "VA"}] 

    For iCounter = LBound(vArray, 1) To UBound(vArray, 1) 
     Debug.Print vArray(iCounter, 1), vArray(iCounter, 2) 
    Next iCounter 
End Sub 

然而,這不和提出了一個「類型不匹配「錯誤。不同的是,我試圖(和希望),而不是使用恆定的值的變量:

Sub SomeSub() 
    Dim vArray As Variant 

    Dim iZip As Integer 
    Dim sCity As String 
    Dim sState As String 

    iZip = 22150 
    sCity = "Springfield" 
    sState = "VA" 

    Dim iCounter As Integer 
    vArray = [{"Zip", iZip;"City", sCity; "State", sState}] 

    For iCounter = LBound(vArray, 1) To UBound(vArray, 1) 
     Debug.Print vArray(iCounter, 1), vArray(iCounter, 2) 
    Next iCounter 
End Sub 

我發現這種方法用於分配陣列很少或根本沒有資料,所以我希望有人有一些有識之士報價。

謝謝!

回答

1

VBA還有一個名爲Array的內置函數。您可以使用Array函數中的Array來使其「多維」。

Sub SomeSub() 
    Dim vArray As Variant 

    Dim iZip As Integer 
    Dim sCity As String 
    Dim sState As String 

    iZip = 22150 
    sCity = "Springfield" 
    sState = "VA" 
    vArray = Array(Array("Zip", iZip), Array("City", sCity), Array("State", sState))  

    Dim iCounter As Integer 

    For iCounter = LBound(vArray, 1) To UBound(vArray, 1) 
     Debug.Print vArray(iCounter, 1), vArray(iCounter, 2) 
    Next iCounter 
End Sub 

儘管上述代碼確實回答了OP,但我正在編輯此答案並提供更多信息。從技術上講,這不是「多維的」。相反,它是「鋸齒狀的」。它是單維數組的一維數組的變體。在VBA中,當你定義一個真正的多維數組,你可以使用這個語法:

Sub someSub() 
    Dim vArray(5, 5) As Long 
    vArray(0, 1) = 5 
    vArray(0, 2) = 3 
    vArray(1, 3) = 4 
    Debug.Print vArray(1, 3) 'Prints 4 
End Sub 

另一個Stackflow用戶建議此校正技術,我想納入知識到答案。

+1

很好玩,我的朋友..很好玩。 – 2014-09-22 22:19:34

1

[...]語法是Application.Evaluate()的快捷方式,當你發現它僅適用於運行時間常量表達式,你可以用它來Application.Evaluate()一個真正的呼叫傳遞dynamc字符串,但(* IMO)那是相當哈克。

替代方案:

  • 創建一個接受的參數的paramarray()工廠功能,使用模計數器弄清楚分配到什麼層面通過它一步。

  • 作爲第一維似乎是一個固定的字符串用一個用戶定義的類型,以允許udt_var.City = "XXX"/udt_var.Zip = 12345 ...

  • 使用集合(或字典),其上面的不同是可迭代(由鍵後者)。

+0

謝謝您的澄清。我決定使用ParamArray編寫一個函數來組裝數組..我並不喜歡使用Application方法。 – 2014-09-21 15:41:57