написал: Вам необходимо указать конкретный (с определенным номером) элемент коллекции
Так нет же, значениями словаря у меня является коллекция, а не элемент. И таковая структура нормально работает, если обращаться к ней так, как закомментировано в моём примере. А при попытке присвоить новое значение методом Item словаря, возникает ошибка. Т.е. мой вопрос не в том, какой костыль написать для обхода этого непонятного мне эффекта, а в том, почему так происходит. Вот более наглядно:
Код
Sub test2()
Dim test_dict_dict As Object
Set test_dict = CreateObject("Scripting.Dictionary")
Dim first_coll As New Collection
first_coll.Add 1.15
test_dict.Add "name", first_coll 'добавил в словарь по ключу "name" первую коллекцию
Dim second_coll As New Collection
second_coll.Add 1.16
test_dict.Item("name") = second_coll 'При попытке назначить другую коллекцию в значение этого ключа - Ошибка 450
End Sub
Спасибо за подсказку, именно так и сделал. Осталось только понять почему код ниже не работает, (то что закомментировано работает, но это понимать не нужно))
Код
Sub test2()
Dim test_dict_dict As Object
Set test_dict = CreateObject("Scripting.Dictionary")
Dim start_vals_coll As New Collection
start_vals_coll.Add 1.15
test_dict.Add "name", start_vals_coll
Dim exist_vals_coll As New Collection
Set exist_vals_coll = test_dict.Item("name")
exist_vals_coll.Add 1.16
test_dict.Item("name") = exist_vals_coll 'Ошибка 450
'test_dict("name").Add 1.16 'А это работает
End Sub
Здравствуйте. В процессе процедуры формирую Dictionary, в котором текстовым ключам соответствуют наборы данных. Эти наборы надо изменять, и наиболее логичным представляется динамический массив. Примерный код, который я хотел бы видеть:
Код
Sub test()
Dim test_dict As Object
Set test_dict = CreateObject("Scripting.Dictionary")
Dim start_vals_arr() As Single
ReDim start_vals_arr(0)
start_vals_arr(0) = 15.87
test_dict.Add "Test_key", start_vals_arr
aaa = test_dict.Item("Test_key")
ReDim Preserve aaa(1)
aaa(1) = 48.56
test_dict.Item("Test_key") = aaa
'для Watches
bbb = test_dict.Item("Test_key")
End Sub
Он не работает, выдаёт ошибку ReDim.
В принципе, удалось заставить работать грандиозный костыль с объявлением статического массива длиной (старый + 1) и копированием в него всё содержимое старого + новое значение, но это реально грандиозный костыль. Подскажите пожалуйста, есть ли более человеческий способ добраться до динамического массива, который является значением словаря, и редимить/изменять значения в нём?
Не вполне понимаю зачем небольшой файл-пример, но всё же соорудил. Итак, разделил по листам. Надеюсь, что если будет решение для листов, то можно будет распространить его и на файлы. На первом листе два аргумента, и нужно организовать результат вычислений. На втором листе - пример единичного вычисления результата. Нужно, чтобы значение результата на первом листе пересчитывалось при изменении на втором листе формулы или третьего аргумента. Т.е. если завтра кто-то изменит в формуле на втором листе "+" на "-", или значение третьего аргумента, то на первом листе столбец с результатом должен быть пересчитан по новым правилам.
Добрый день. Прошу подсказать каким образом можно решить следующую задачу: Имеется файл с частью исходных данных для вычислений и результатом вычислений, вот так: Где-то, возможно на этой же машине, имеется файл, включающий в себя математику и коэффициенты, вот так: Самый простой способ заполнить таблицу "Данные" это дублировать формулу с файла (листа) "Расчёт". Но если так сделать, то при изменении формул и вообще модификации расчётов, это нужно будет не забыть повторить в файле (листе) "Данные". Как можно "отправить" данные в расчёт и вернуть результат? Ситуация осложнена тем, что желательно универсальное решение для MS Офиса, и Либры, и Гугл- таблиц. Удивительно что не нашёл похожего на форуме. И вообще не покидает ощущение того, что это должно быть как-то очень просто