我在一个名为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
有人知道在VBA6.5中初始化scripting.dictionary的一些干净的方法吗?
发布于 2014-01-09 16:39:20
你的意思大概是VBA?如果是这样,则无法在例程之外操作/初始化对象实例。
唯一的方法是将它封装在一个类(cDict)中,并使用constuctor:
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(Of type与VB.Net泛型相关)
发布于 2014-01-09 16:59:11
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 Subhttps://stackoverflow.com/questions/21025756
复制相似问题