В одном из обзоров мы рассмотрели как создать и заполнить элемент управления ComboBox.
💡 Но что, если требуется удалить или изменить выбранное значение из списка, и как добавить новые данные в выпадающий список?!
Да, безусловно это возможно!😉
И в этой части обзора мы рассмотрим как удалить данные из выпадающего списка.
📢 Скачать исходник с примером кода вы можете в конце статьи 🔽
▶️ Исходные данные
Решение рассмотрим на примере данных предыдущего обзора:
➡️ В данном решении уже представлена возможность отображения выпадающего списка и соответствующих ему данных:
Добавить решению гибкость, например, в том случае если вы ограничили пользователя к доступу к источнику данных, и позволить удалять данные из выпадающего списка поможет следующий пошаговый алгоритм.
▶️ Элемент управления CommandButton
Несмотря на то, что мы будем использовать уже готовую форму, все же потребуется в нее внести некоторые изменения.
А именно, для инициирования действий добавим элемент управления CommandButton (кнопку):
▶️ Как найти строку со значением и удалить
Позволить пользователю удалять данные из выпадающего списка (при отсутствии доступа к источнику) можно непосредственно на форме применив следующий макрос:
Чтобы "привязать" макрос к кнопке, дважды кликните по кнопке. Вам будет доступен редактор кода. Вставьте этот код в процедуру обработки события нажатия на кнопку.
🔔 Что важно!
- Убедитесь, что вы заменили "Лист1" на имя вашего листа, на котором находится таблица.
- Предполагается, что ComboBox2 уже заполнен значением. Если это не так, вам нужно будет добавить код для получения значения из ComboBox2.
Макрос начинает проверку и удаление строк с конца таблицы, чтобы избежать проблем с удалением строк во время итерации.
⚠️ Внимание! Предупредите пользователя, что удаление строк из таблицы может быть опасным действием. А при тесте макроса убедитесь, что у вас есть резервная копия данных.
➡️ После клика по кнопке выбранное значение будет удалено из исходных данных, а свойство Value в ComboBox будет установлено на пустое значение, тем самым очищая его:
Но, как видите, проблема в том, что в источнике имеется нумерация. Да, он скрыт, и в данном случае это не принципиально.
Но если все же потребуется "подстраивать" нумерацию в зависимости от внесенных изменений и автоматически перенумеровать строки в столбце при удалении строк в таблице, можно модифицировать макрос следующим образом:
➡️ В этой версии при нажатии на кнопку будет выполнена операция удаления строк на листе "Лист1" (поменяйте "Лист1" на имя вашего листа) и перенумерация строк в столбце A (начиная с A2), основываясь на наличии значений в столбце B:
▶️ Дополнения
Логично предположить, что для удаления строк отвечающих заданному параметру ComboBox1 следует изменить критерий поиска в коде:
В данном случае при выборе определенной категории ⬇️
➡️ Все товары данной категории будут удалены:
Но, чтобы не зависеть от условия выбора (ситуации могут быть разные) дополним ранее рассмотренный макрос условием:
В этой версии кода:
- если ComboBox2 содержит значение, то будут удаляться строки, где значение ComboBox2 совпадает со значением в столбце C.
- если ComboBox2 пуст, то будут удаляться строки, где значение ComboBox1 совпадает со значением в столбце B.
Чтобы удаленный параметр не отображался в ComboBox1 после того как форма уже открыта следует использовать индекс элемента:
➡️ Теперь при удалении определенной категории изменения в выпадающем списке будут доступны без повторного открытия/закрытия формы:
На наш взгляд последний приведенный вариант макроса является наиболее полным и максимально учитывает все возможные ситуации.
Но вы можете использовать любой вариант из рассмотренных, который в большей степени отвечает вашим потребностям и задачам.
А о том, как добавлять новое значение в ComboBox мы уже поговорим в следующем обзоре 😉
📍 Рекомендуемые статьи 🔽