Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Изменение массива, являющегося значением Dictionary, Правильный способ изменить значение Dictionary, которое является динамическим массивом
 
Цитата
Sanja написал:
но Вы объявляете переменную
Ошибку сделал при переносе и форматировании листинга сюда, на форум.
Цитата
нужно присваивать как объекту, т.е. через Set
Sanja , ZVI, спасибо вам! Это и есть ответ на заданный вопрос!

К делу не относится, но vba это весьма странный и нелогичный язык (после работы с gs от google).
Изменено: Сергей - 08.04.2025 20:57:32
Изменение массива, являющегося значением Dictionary, Правильный способ изменить значение Dictionary, которое является динамическим массивом
 
Цитата
написал:
Вам необходимо указать конкретный (с определенным номером) элемент коллекции
Так нет же, значениями словаря у меня является коллекция, а не элемент. И таковая структура нормально работает, если обращаться к ней так, как закомментировано в моём примере. А при попытке присвоить новое значение методом 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
Изменение массива, являющегося значением Dictionary, Правильный способ изменить значение Dictionary, которое является динамическим массивом
 
Спасибо за подсказку, именно так и сделал.
Осталось только понять почему код ниже не работает, (то что закомментировано работает, но это понимать не нужно))
Код
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, Правильный способ изменить значение Dictionary, которое является динамическим массивом
 
Цитата
написал:
Похожий вопрос
Спасибо всем ответившим!
Странно, что я не нашёл тему по ссылке, хотя честно пробовал.
Изменение массива, являющегося значением Dictionary, Правильный способ изменить значение Dictionary, которое является динамическим массивом
 
Здравствуйте.
В процессе процедуры формирую 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) и копированием в него всё содержимое старого + новое значение, но это реально грандиозный костыль. Подскажите пожалуйста, есть ли более человеческий способ добраться до динамического массива, который является значением словаря, и редимить/изменять значения в нём?

Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Дмитрийже, Спасибо за помощь. Идеально. От себя добавлю, что таким же образом можно использовать при проверке данные из запросов PQ.
Разделение данных и вычислений в разные документы
 
Не вполне понимаю зачем небольшой файл-пример, но всё же соорудил.
Итак, разделил по листам. Надеюсь, что если будет решение для листов, то можно будет распространить его и на файлы.
На первом листе два аргумента, и нужно организовать результат вычислений.
На втором листе - пример единичного вычисления результата.
Нужно, чтобы значение результата на первом листе пересчитывалось при изменении на втором листе формулы или третьего аргумента.
Т.е. если завтра кто-то изменит в формуле на втором листе "+" на "-", или значение третьего аргумента, то на первом листе столбец с результатом должен быть пересчитан по новым правилам.
Разделение данных и вычислений в разные документы
 
Добрый день.
Прошу подсказать каким образом можно решить следующую задачу:
Имеется файл с частью исходных данных для вычислений и результатом вычислений, вот так:

Где-то, возможно на этой же машине, имеется файл, включающий в себя математику и коэффициенты, вот так:

Самый простой способ заполнить таблицу "Данные" это дублировать формулу с файла (листа) "Расчёт". Но если так сделать, то при изменении формул и вообще модификации расчётов, это нужно будет не забыть повторить в файле (листе) "Данные".
Как можно "отправить" данные в расчёт и вернуть результат?
Ситуация осложнена тем, что желательно универсальное решение для MS Офиса, и Либры, и Гугл- таблиц.
Удивительно что не нашёл похожего на форуме. И вообще не покидает ощущение того, что это должно быть как-то очень просто :sceptic:  
Страницы: 1
Наверх