По правилам хорошего тона операции поиска данных должны производиться в том же окне, в котором находится основная база данных.
На рис. 5.6 приведен возможный вариант интерфейса для организации поиска.
Рис. 5.6. Интерфейс для организации операции поиска
Поиск производится следующим образом:
– в группе полей «Критерии поиска» вводятся нужные значения;
– щелкается кнопка «Найти».
Кнопка «Отобразить все» предназначена для восстановления исходной таблицы.
Технология создания элементов интерфейса аналогична предыдущему разделу – т.е. сначала пишутся макросы, выполняющие нужные операции, а затем создаются кнопки, связанные с этими макросами.
Итак, поэтапно.
1. В ячейках D6:H7 сформировать шаблон для ввода критериев поиска
Обратите внимание на следующие моменты:
- в шаблоне нет поля «Код товара». Это связано с тем, что данное поле связано с полем «Наименование» и эти поля дублируют друг друга. Поэтому при поиске можно использовать любое из них.
- нельзя заставлять пользователя вручную вводить наименование товара.
|
|
Очевидно, что в подавляющем большинстве случаев он введет что-то «не то».
Для автоматизации ввода наименований можно поступить следующим образом:
- с листа «Товары» скопируем на данный лист (в ячейки Q13:Q18) список товаров;
- устанавливаем курсор в E7 и выполняем команды:
Данные > Проверка > В появившемся окне (рис. 5.7)> В поле «Тип данных» выбираем «Список» > В поле «Источник» указываем адрес списка (т.е. Q13:Q18) > Ok
Рис. 5.7. Окно «Проверка вводимых значений»
Если сейчас перейти в ячейку E7, то там появится флажок раскрытия списка, с помощью которого можно выбрать нужный товар.
2. Записать макрос для кнопки «Найти»
Выполним команды Сервис > Макрос > Начать запись > На запрос об имени макроса напечатать имя «Найти» > Установить курсор в C11 > Данные > Фильтр > Расширенный фильтр > В окне «Расширенный фильтр» в поле «Исходный диапазон» указать адрес основной базы> В поле «Диапазон условий» указать $D$6:$H$7 > Установить переключатель в опции «Скопировать результат в другое место» > В поле «Поместить результат в диапазон» указать $D$6:$H$6 > Ok > Сервис > Макрос > Остановить запись.
В результате должен получиться следующий макрос:
Sub Найти()
Range("C11").Select
Range("Данные_продаж").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("D6:H7"), Unique:=False
End Sub
3. Записать макрос для кнопки «Отобразить все»
Выполним команды Сервис > Макрос > Начать запись > На запрос об имени макроса напечатать имя «ОтобразитьВсе» > Установить курсор в C11 > Данные > Фильтр > Отобразить все > Остановить запись.
|
|
В результате должен получиться следующий макрос:
Sub ОтобразитьВсе()
Range("C11").Select
ActiveSheet.ShowAllData
End Sub
4. Создать кнопки «Найти» и «Отобразить все», и связать их соответствующими макросами.
Проверьте действие кнопок, задавая различные критерии поиска.
У созданной системы поиска имеется одна неприятная особенность: если случайно нажать на кнопку «Отобразить все» два раза подряд, то выйдет сообщение об ошибке.
Если это произошло, то в появившемся сообщении необходимо нажать кнопку «End». Один из вариантов устранения этого неудобства изложен в разделе 5.4.6.5.