Vba 脚本的干净初始化。字典

Vba 脚本的干净初始化。字典,vba,dictionary,initialization,Vba,Dictionary,Initialization,我在一个名为ProcessBook的应用程序中使用VBA,希望在字典中存储一些静态信息 我试图干净地初始化这个字典,而不需要调用单独的过程,但是我尝试的方法似乎都不是预期的 以下是我迄今为止所尝试的: Dim myDict As New Dictionary(Of String, String) (("key1", "item1"), ("key2", "item2")) Dim myDict As Variant

我在一个名为ProcessBook的应用程序中使用VBA,希望在字典中存储一些静态信息

我试图干净地初始化这个字典,而不需要调用单独的过程,但是我尝试的方法似乎都不是预期的

以下是我迄今为止所尝试的:

Dim myDict As New Dictionary(Of String, String) (("key1", "item1"), ("key2", "item2"))
Dim myDict As Variant
Set myDict = New Dictionary( ("key1", "item1"), ("key2", "item2") )
基本上是一堆猜测,包括这样的形式

到目前为止,我能做的最好的事情是:

With myDict
.add "key1", "item1"
.add "key2", "item2"
End With
但是,当这不是我想要避免的例行程序时,它会对我咆哮

我相信来自{}语法的(类型,类型)超越了VBA6.5


有人知道在VBA 6.5中初始化scripting.dictionary的一些干净的方法吗?

6.5可能是指VBA?如果是这样,则无法在例程之外操纵/初始化对象实例

唯一的方法是将其封装在类(
cDict
)中并使用构造函数:

Private mDict As Scripting.Dictionary

Private Sub Class_Initialize()
    Set mDict = New Scripting.Dictionary
    With mDict
        .Add "key1", "item1"
        .Add "key2", "item2"
    End With
End Sub

Public Property Get Dict() As Scripting.Dictionary
    Set Dict = mDict
End Property
然后在客户端模块中

Private Dict As New cDict

Sub foo()
    MsgBox Dict.Dict.Item("key1")
    Dict.Dict.Add "key3", "item3"
    MsgBox Dict.Dict.Item("key3")
End Sub

类型与VB.Net泛型相关)

VBA实际上是一种过程语言,而不是一种面向对象的语言,因此答案是使用过程。 怎么做

Option Explicit
Option Compare Text

Sub test()
    Dim dic As New Scripting.Dictionary
    Add dic, Array("Darren", 123, "Alex", 321)
    MsgBox dic.Count
End Sub

Public Sub Add(dic As Dictionary, values As Variant)
    If Not IsArray(values) Then
        Err.Raise -1, "Add", "Values must be varient Array"
    ElseIf UBound(values) Mod 2 = 0 Then
        Err.Raise -1, "Add", "Even number of values required"
    End If
    Dim iQ As Long
    For iQ = 0 To UBound(values) Step 2
        dic.Add values(iQ), values(iQ + 1)
    Next
End Sub

谢谢你的回答,真不幸。我希望能够做一些类似于集合初始化的事情,看起来像:Dim myCol作为变量myCol=Array(“item1”、“item2”、“item3”)“about”框可能会报告“vb6.5”,但它实际上是VBScript,与VB完全不同。nett这正是我所做的,感谢您的更正。VBScript不允许将
Dim var作为类型
语法,这是Office VBA代码(Microsoft过去称之为VB 6.5)