2014-01-09 14 views
1

ProcessBook이라는 응용 프로그램에서 VBScript를 사용하고 있는데 일부 정적 정보를 사전에 저장하려고합니다.Scripting.Dictionary의 초기화 초기화

이 사전을 별도로 호출 할 필요없이 깔끔하게 초기화하려고합니다. 그러나 시도한 메서드 중 어느 것도 예상 한 것처럼 보이지 않습니다.

는 여기에 지금까지 시도했습니다 무엇 : 기본적으로

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에서 scripting.dictionary를 초기화하는 몇 가지 청소 방법을 알고 있나요 VB 6.5

넘어?

+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) 내에 캡슐화하고 constructor에 사용한다 : 클라이언트 모듈이어서

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 
관련 문제