Dictionary
을 사용하는 것에 대한 Alex K.의 조언은 정확하지만, 여기에있는 문제는 그의 답변보다 더 일반적이라고 생각합니다. Collection
키 (또는 해당 위치에 대한 색인 위치)는 쓰기가 아닌 읽기에만 유용합니다. 그래서이 줄
:
dFeat("M1")("TOTAL") = 88 ' Error here
dFeat("M1")
괜찮습니다. 키 "M1"을 사용하여 추가 한 Collection
을 반환합니다. 의 요소에 컬렉션을 직접 할당하려고하기 때문에 오류가 발생합니다. 일반적으로 c
이 Collection
인 경우 c("TOTAL")
(또는 c(2)
)은 좌변 일 수 없습니다.
Alek K.가 말한 것처럼이 문제를 해결하는 가장 좋은 방법은 내부 "컬렉션"또는 내부 및 외부 모두에 Dictionary
을 사용하는 것입니다. 보일 것이다 내부에 대한 하나를 사용하는 방법은 다음과 같습니다
Dim d As Dictionary
Set d = New Dictionary
d("PASSED") = 3
d("TOTAL") = 4
dFeat.Add d, "M1"
, 행 : dFeat("M1")("TOTAL")
이 유효한 좌변 때문에
dFeat("M1")("TOTAL") = 88
가 작동합니다. 더 간결
Dim c As Collection
Set c = dFeat("M1")
Call c.Remove("TOTAL")
Call c.Add(88, "TOTAL")
나 : 어떤 이유로 당신이 또는 MS 스크립팅 런타임을 포함하지 않을 수없는 경우
, 당신은 같은과 실패 라인을 교체해야합니다
Call dFeat("M1").Remove("TOTAL")
Call dFeat("M1").Add(88, "TOTAL")
그런 다음 에게 dFeat("M1")("TOTAL")
의 값을 읽을 수 있습니다,하지만 당신은 여전히 여기에 할당 할 수 없습니다.
+1 'Collection key (또는 그 문제에 대한 색인 위치)는 읽기 전용, 쓰기가 아님'입니다. 프로젝트를 위해 매우 녹슬었던 VBA를 닦아내는 것이 핵심이었습니다 (하!) - 새로운 아이템으로 전체 아이템을 대체하는 것이 트릭입니다. 필자의 경우 이것은 기존 어레이의 값으로 채워진 새로운 배열을 의미합니다. 아마도 대형 객체의 경우보다 성능이 좋은 방법이지만, 각 값이 2 개인 수십 개의 배열 만 처리 할 것입니다. – brichins