VBA 컬렉션에서 키/값 쌍을 루프할 수 있습니까?
VB.NET에서는 사전의 키/값 쌍을 통해 다음을 반복할 수 있습니다.
Dictionary<string, string> collection = new Dictionary<string, string>();
collection.Add("key1", "value1");
collection.Add("key2", "value2");
foreach (string key in collection.Keys)
{
MessageBox.Show("Key: " + key + ". Value: " + collection[key]);
}
VBA에서는 Collection 개체의 값을 통해 반복할 수 있습니다.
Dim Col As Collection
Set Col = New Collection
Dim i As Integer
Col.Add "value1", "key1"
Col.Add "value2", "key2"
For i = 1 To Col.Count
MsgBox (Col.Item(i))
Next I
스크립팅으로 이 작업을 수행한다는 것도 알고 있습니다.Dictionary VBA object인데 컬렉션으로 가능한지 궁금합니다.
VBA 컬렉션에서 키/값 쌍을 통해 반복할 수 있습니까?
컬렉션에서 키 이름을 검색할 수 없습니다.대신 Dictionary Object:
Sub LoopKeys()
Dim key As Variant
'Early binding: add reference to MS Scripting Runtime
Dim dic As Scripting.Dictionary
Set dic = New Scripting.Dictionary
'Use this for late binding instead:
'Dim dic As Object
'Set dic = CreateObject("Scripting.Dictionary")
dic.Add "Key1", "Value1"
dic.Add "Key2", "Value2"
For Each key In dic.Keys
Debug.Print "Key: " & key & " Value: " & dic(key)
Next
End Sub
이 대답은 컬렉션의 키를 통해 반복되지 않습니다. 불가능한 것처럼 보이지만 사전을 사용하지 않으려는 경우 추가 해결 방법을 제공합니다.
https://stackoverflow.com/a/9935108/586754 에 설명된 대로 KeyValues 컬렉션을 수행할 수 있습니다. (KeyValues 클래스를 만든 다음 해당 컬렉션에 넣습니다.)
내(Excel이 아닌 SSRS) 경우 클래스를 추가할 수 없었고 .net 참조를 추가하고 싶지 않았습니다.
키를 저장하는 데 1개, 값을 저장하는 데 1개의 컬렉션을 사용하여 추가하거나 삭제할 때 동기화를 유지했습니다.
다음은 문자열/int 키/값으로 제한되지만 SSRS에서 값을 집계하는 데 필요한 int 값이 저장되지 않고 이전 값에 추가되는 예로 add를 보여줍니다.값을 추가하지 않고 저장하기 위해 쉽게 수정할 수 있습니다.
ck 키 수집, cv 값 수집.
Private Sub StoreAdd(ck As Collection, cv As Collection, k As String, v As Integer)
Dim i As Integer
Dim found As Boolean = false
Dim val As Integer = v
For i = 1 to ck.Count
if k = ck(i)
' existing, value is present
val = val + cv(i)
' remove, will be added later again
ck.Remove(i)
cv.Remove(i)
End If
if i <= ck.Count
' relevant for ordering
If k > ck(i)
' insert at appropriate place
ck.Add(k, k, i)
cv.Add(val, k, i)
found = true
Exit For
End If
End If
Next i
if not found
' insert at end
ck.Add(k, k)
cv.Add(val, k)
End If
End Sub
언급URL : https://stackoverflow.com/questions/21432222/can-i-loop-through-key-value-pairs-in-a-vba-collection
'programing' 카테고리의 다른 글
jQuery - 확인란 사용/사용 안 함 (0) | 2023.05.22 |
---|---|
Swift의 URL에서 이미지 로드/다운로드 (0) | 2023.05.22 |
ngIf inside ngFor 매개변수가 있는 Angular - ng-template (0) | 2023.05.22 |
메일 메시지, 보낸 사람 및 보낸 사람 속성 간의 차이 (0) | 2023.05.22 |
서브 또는 파이어베이스 서브를 끝내는 방법 (0) | 2023.05.22 |