Совет Алекса К. об использовании Dictionary
верен, но я думаю, что проблема здесь более общая, чем позволяет предположить его ответ.Клавиша Collection
(или индексная позиция в этом отношении) хороша только для чтения, но не для записи.
Итак, в этой строке:
dFeat("M1")("TOTAL") = 88 ' Error here
dFeat("M1")
в порядке.Возвращает Collection
, который вы добавили с помощью клавиши "M1".Ошибка происходит потому, что вы пытаетесь напрямую назначить элемент этой коллекции.В общем, если c
является Collection
, c("TOTAL")
(или c(2)
) не может быть lvalue.
Как говорит Алек К., лучший способ обойти это - использовать Dictionary
для внутренних «коллекций» или для внутреннего и внешнего.Вот как будет выглядеть его для внутреннего:
Dim d As Dictionary
Set d = New Dictionary
d("PASSED") = 3
d("TOTAL") = 4
dFeat.Add d, "M1"
Тогда строка:
dFeat("M1")("TOTAL") = 88
будет работать, потому что dFeat("M1")("TOTAL")
- это действительное значение lvalue.
Если по какой-то причине вы не можете или не хотите включать среду выполнения сценариев MS, вам придется заменить сбойную строку на что-то вроде:
Dim c As Collection
Set c = dFeat("M1")
Call c.Remove("TOTAL")
Call c.Add(88, "TOTAL")
или болеекратко:
Call dFeat("M1").Remove("TOTAL")
Call dFeat("M1").Add(88, "TOTAL")
Затем вы можете прочитать значение dFeat("M1")("TOTAL")
, но вы по-прежнему не можете назначить его.