Найти тему

📌 Как внести изменения в выпадающий список. Часть 3: два способа найти строку содержащую значение и изменить

Оглавление

Всем привет! 👋

Сегодня мы рассмотрим 2 (два) способа решения позволяющие вносить изменения в уже существующие записи выпадающих списков.

Как внести изменения в выпадающий список. Часть 3: два способа найти строку содержащую значение и изменить
Как внести изменения в выпадающий список. Часть 3: два способа найти строку содержащую значение и изменить

📢 Скачать исходник с примером кода вы можете в конце статьи 🔽

-3

▶️ Постановка задачи

В целях данного примера будем использовать уже рассмотренную ранее форму:

-4

Функционал данного примера позволяет взаимодействовать с выпадающими списками, удалять и добавлять новые значения.

А как насчет внесения изменений? 😉

Нет, этого пока данное решение это "не умеет". Но это легко поправимо!

Итак, задача:

🎯 предоставить пользователю возможность вносить изменения в уже имеющиеся данные (например, в результате опечатки или изменения стоимости товара)

▶️ Элементы управления

Чтобы справиться с поставленной задачей добавим элементы управления:

  • TextBox (только для первого способа)
Элемент управления TextBox
Элемент управления TextBox

* В последующем, данные элементы можно скрыть (чтобы не загромождать форму) изменив размер формы или установить свойство
Visible=False:

-6

Данное свойство позволит не отображать "служебные" элементы управления на форме:

-7
  • CommandButton (кнопка)
Размещение CommandButton (кнопки) на пользовательской форме
Размещение CommandButton (кнопки) на пользовательской форме

▶️ Способ 1. Используем дополнительный элемент управления

Смысл решения будет заключаться в связи данных TextBox и ComboBox.

Напомним, что механизм заполнения ComboBox1 и ComboBox2 уже определен. Остается внести лишь небольшую корректировку.

Чтобы выбранное значение из ComboBox1 было тут же записано TextBox добавив зададим событие ComboBox1_Click:

-9

Аналогично поступим для ComboBox2:

-10

Теперь при выборе значений они будут продублированы в соответствующие TextBox:

-11

Это даст возможность внести изменения в нужный ComboBox, при этом данные в TextBox будут исходными:

-12

🔘 Остается только назначить соответствующий макрос чтобы изменения вступили в силу:

-13

Теперь данные в исходной таблице будут изменены:

-14

Для того чтобы измененные значения сразу попадали в выпадающие списки ComboBox1 и ComboBox2, вам нужно будет обновить списки значений после внесения изменений в таблицу.

🔘 Вот как это можно сделать:

Этот макрос позволяет обновлять данные в таблице на основе значений в TextBox'ах и ComboBox'ах, сохраняя выбранные пользователем значения в ComboBox'ах без открытия/закрытия формы.
Этот макрос позволяет обновлять данные в таблице на основе значений в TextBox'ах и ComboBox'ах, сохраняя выбранные пользователем значения в ComboBox'ах без открытия/закрытия формы.

📝 Краткое описание:

🔹 Подготовка переменных:

  • ws (рабочий лист),
  • lastRow (последняя строка с данными),
  • i (счетчик цикла),
  • r (диапазон для проверки уникальных значений),
  • tmp (вспомогательная переменная для проверки уникальности).

🔹 Сохранение текущих выбранных значений: Для того чтобы сохранить текущие выбранные значения в ComboBox1 и ComboBox2 используем переменные selectedValueComboBox1 и selectedValueComboBox2.

🔹 Обработка данных и обновление значений в таблице на основе выбранных параметров: Перебираем строки данных, начиная с 2-й строки (первая строка считается заголовком). Для каждой строки проверяется условие:

  • Если ComboBox2 не имеет выбранного значения (пустой), выполняем следующие действия: ищем значение в столбце В равно значению из TextBox2 и если оно отличается от ранее установленного - заменяем.
  • Если ComboBox2 имеет выбранное значение (не пустой), выполняем проверку по всем столбцам, и при наличии расхождений обновляем данные в столбцах.

🔹 Обновление ComboBox: выполняется на основе значений в столбцах B и С. Если значение уже есть в ComboBox, оно не добавляется повторно. Т.к. выпадающие списки зависимые ComboBox2 обновляется на основе выбранного значения в ComboBox1.

🔘 Восстановление значений в ComboBox и TextBox: значение TextBox восстанавливается с помощью переменной selectedValueComboBox, чтобы сохранить выбор пользователя, далее восстанавливаем ComboBox1 и ComboBox2

➡️ Теперь после внесения изменений в таблицу, макрос будет обновлять списки значений ComboBox1 и ComboBox2 и отображать внесенные изменения в выпадающих списках без закрытия/открытия формы:

В результате выполнения макроса, данные на листе будут обновлены в соответствии с выбранными значениями в ComboBox1, ComboBox2,
В результате выполнения макроса, данные на листе будут обновлены в соответствии с выбранными значениями в ComboBox1, ComboBox2,

📍 Примечание автора: Не забудьте скрыть "служебные" TextBox:

-17

Функционал форма не потеряет, а напротив, не будет загромождена и приобретет привлекательный вид.

▶️ Способ 2. Используем глобальные переменные для хранения выбранного значения

Как вы могли заметить, в рассмотренном примере суть TextBox заключалась только в хранении значения для сравнения.

А если это так 🤔, то можно ли сохранить значение в памяти приложения не используя дополнительный элемент управления?

Да, можно! 😉

🔘 Достаточно объявить глобальные переменные для хранения значений и использовать событие Click:

-18

Чтобы продемонстрировать как работает сохранение данных в памяти приложения воспользуемся оператором MsgBox:

-19

Как видите данные сохраняются аналогично тому, как при использовании TextBox.

Причем, изменение значения в любом из ComboBox никак не повлияет на исходные данные, т.к. мы их уже запомнили:

-20

Это позволит проводить сравнение, подобно тому, как рассматривалось ранее.

🔘 Так как основной код мы разобрали выше, то применим его, внеся лишь небольшие правки:

-21

🔔 Основное отличие заключается в том, что проверка условия будет осуществляться ни по значению из TextBox, а по значению глобальной переменной.

➡️ В остальном, данный макрос, аналогично рассмотренному выше, позволит вносить изменения в в уже существующие записи выпадающих списков, в т.ч:

  • менять категорию (категория сразу заносится в выпадающий список):
-22
  • менять наименование товара (как для измененной категории, так и вновь выбранной. Наименование товара также сразу вносится в выпадающий список)
-23
  • менять стоимость товара (как для отдельно взятого товара, так и для ранее измененного)
-24

🔵 Мы привели рамочный пример решения, но полагаем, что данный алгоритм вы легко сможете адаптировать под свои нужны.

А какой из способов выбрать, решать вам.

Но на наш взгляд использование глобальных переменных является лучшим 😉, но не единственным решением.

О том, как еще можно установить связь, выполнить поиск значений и их замену расскажем в следующих обзорах. Оставайтесь на связи! 💖

-25
Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас
Наша команда очень заинтересована в создании качественного и полезного контента. Поэтому, если Вам понравился этот урок, не забудьте поблагодарить автора лайком 👍. Если у Вас есть вопросы или своё решение, не стесняйтесь оставить комментарий 💬. Нужно решение для другой проблемы? Пожалуйста, напишите свой вопрос в комментариях 💬, и мы обязательно рассмотрим его в ближайшей теме обзора. Мы ценим Вашу обратную связь 💝, так как это помогает нам оценить, насколько данный материал был полезен для Вас

🔎 Рекомендуемые статьи 🔽

СКАЧАТЬ ПРИМЕР