[英]Declaring Arrays Dynamically in VBA
我試圖動態創建特定長度的arrays
,以便可以在更大的過程中使用它們。
樣本數據:
以下使用Dictionary
代碼為我提供了數據中的計數和唯一文件擴展名。
碼:
Dim dict As New Scripting.Dictionary
For Each cel In Range("B1:B8")
I = 1
If Not dict.Exists(cel.Text) Then
dict.Add cel.Text, I
Else
temp = dict(cel.Text) + 1
dict.Remove cel.Text
dict.Add cel.Text, temp
End If
Next cel
For Each varKey In dict.Keys
Debug.Print varKey & ":" & dict.Item(varKey)
Next
結果:
我想做的是使用Dictionary的結果創建3個(在此示例中)數組pdf(4)
, xlsx(3)
, docm(1)
。
但是行Dim varkey(dict.Item(varKey)) As Variant
給我編譯錯誤 。
需要常量表達式
有辦法嗎? 我在google上搜索了實現此目標的方法,但是沒有運氣。
基本上,我要使用這些不同的擴展名來聲明數組。 但是這些擴展名會有所不同,因此我需要動態聲明它們。 數組應與擴展名相同。
因此,從圖紙或字典中選擇名稱,並將其聲明為指定長度的數組。 長度也可以在以后重新設置,但是主要的問題是從變量中聲明它們。
正如BrakNicku所說,“字典詞典”將為您提供所需的答案。
Sub PrintExtensionCount()
Dim Cell As Range
Dim Map As New Scripting.Dictionary, subMap As New Scripting.Dictionary
For Each Cell In Range("B1:B8")
If Not Map.Exists(Cell.Value) Then Map.Add Cell.Text, New Dictionary
Set subMap = Map(Cell.Value)
subMap.Add Cell.Offset(0, -1).Value, vbNullString
Next
Dim Key As Variant
For Each Key In Map
Set subMap = Map(Key)
Debug.Print Key; ":"; subMap.Count
Next
End Sub
請勿混淆,但我喜歡使用ArrayList字典。
Sub PrintExtensionCount()
Dim Cell As Range
Dim Map As New Scripting.Dictionary, list As Object
For Each Cell In Range("B1:B8")
If Not Map.Exists(Cell.Value) Then Map.Add Cell.Text, CreateObject("System.Collections.ArrayList")
Set list = Map(Cell.Value)
list.Add Cell.Offset(0, -1).Value
Next
Dim Key As Variant
For Each Key In Map
Set list = Map(Key)
Debug.Print Key; ":"; list.Count
Next
End Sub
我不確定確切的任務是什么,但是如果我理解您的意見,這是一個XY問題。
Dim
語句- 聲明性語句 -不可執行。 這與類型無關( String
, Long
, Variant
數組,等等。)在這方面,您的問題標題可能有點誤導,因為似乎本質上您正在嘗試動態聲明變量 -實際上它們是數組是巧合的。
您可以通過避免編譯錯誤ReDim
明基於從你的字典計數的數組,但你不能拿出變量的動態列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.