簡體   English   中英

在VBA中動態聲明數組

[英]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語句- 聲明性語句 -不可執行。 這與類型無關( StringLongVariant數組,等等。)在這方面,您的問題標題可能有點誤導,因為似乎本質上您正在嘗試動態聲明變量 -實際上它們是數組是巧合的。

您可以通過避免編譯錯誤ReDim明基於從你的字典計數的數組,但你不能拿出變量的動態列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM