VBA:如何将字典项转换为字符串数组?

5

我想要做的事情非常简单。我想获取一个 Dictionary 中所有项目(值)的列表,并将它们保存在一个字符串数组中。

我猜这段代码会有用:

Sub PrintFilters(ByVal crit As Dictionary)
    Dim i() As String
    i = crit.Items()
    ' Do stuff with i
End Sub

然而,在第三行我遇到了类型不匹配的问题。我猜测crit.Items()的返回值是一种列表,而不是一个数组。MSDN页面没有提及这个方法的返回值类型。

有没有正确的方法来解决这个问题?

3个回答

9
我认为这是变量类型,所以尝试这样做:
Sub PrintFilters(ByVal crit As Dictionary)
    Dim i As Variant
    i = crit.Items()
    ' Do stuff with i
End Sub

6

如果您需要一个字符串数组,您需要手动构建一个,因为 .Items 是一个 variant()

Sub PrintFilters(crit As Dictionary)
    Dim key As Variant, i As Long

    ReDim items(crit.Count - 1) As String

    For Each key In crit.Keys()
        items(i) = crit(key)
        i = i + 1
    Next

    Debug.Print Join(items, ", ")
End Sub

我猜原帖的作者并不是真正想要一个 String,而是一个 Variant 数组 :P - user2140173

2
请查看以下两个选项,它们可以通过直接处理转换作为主例程的一部分或将字典传递给返回字符串数组的函数来实现相同的结果;在VBA本地窗口中检查,arrString是类型为"String(0 to 2)"的变量。请注意,数组可以使用字典.Keys.Items构建。

在第一个示例中,Join函数创建一个字符串,包括所有aDict.Items,用"|"字符分隔。然后,Split函数将该字符串分解成一个字符串数组,其中"|"充当用于创建每个数组元素的分隔符。

在这两个示例中,从字典到字符串数组的实际转换都可以用1行代码实现。

选项#1-作为主例程的一部分

Sub Dictionary_to_StringArray()

   Dim aDict As Scripting.Dictionary
   Dim arrString() As String

   Set aDict = New Scripting.Dictionary
   aDict.Add "United Kingdom", "London"
   aDict.Add "France", "Paris"
   aDict.Add "United States of America", "Washington, D.C."

   arrString = Split(Join(aDict.Items, "|"), "|") 'this works equally with .Items & .Keys

   Set aDict = Nothing
   Erase arrString

End Sub

选项 #2 - 由专用函数处理转换

Sub CallingProc()

   Dim aDict As Scripting.Dictionary
   Dim arrString() As String

   Set aDict = New Scripting.Dictionary
   aDict.Add "United Kingdom", "London"
   aDict.Add "France", "Paris"
   aDict.Add "United States of America", "Washington, D.C."

   arrString = Make_StringArray_From_Dictionary(aDict)

   Set aDict = Nothing
   Erase arrString

End Sub

Function Make_StringArray_From_Dictionary(ByVal SubmitDict As Scripting.Dictionary) As String()

   Make_StringArray_From_Dictionary = Split(Join(SubmitDict.Items, "|"), "|")

End Function

如果您的字符串“|”包含在键或项中,则会导致此代码出错。 - IT goldman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接