2014-01-09 68 views
1

我在名为ProcessBook的应用程序中使用VBScript,我正在寻找将一些静态信息存储在字典中。清理脚本初始化。字典

我试图初始化这个字典干净,无需调用一个单独的过程,但没有任何我尝试的方法似乎预计。

这里是我试过到目前为止:

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 

但这又喊又叫时,它不是一个套路,我想避免的内部。

我相信(类型,类型)从{}语法超出VB 6.5

有谁知道的一些干净的方式在VB 6.5初始化的Scripting.Dictionary?

+1

关于对话框可能会报告“VB 6.5”,但它实际上是VBScript和VB.NET从相当 – Plutonix

+0

不同这正是我所做的,感谢您的指正。 –

+1

VBScript不允许'Dim var As Type'语法,这是Office VBA代码(以前它被Microsoft称为VB 6.5) – DarrenMB

回答

1

按6.5估计你的意思是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泛型)

+0

感谢您的回答,这很不幸。 我希望能够做类似于Collection初始化的东西,如下所示: Dim myCol As Variant myCol = Array(“item1”,“item2”,“item3”) –

1

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