Для навигации в списках, имеющих значительное количество элементов и заполненных символами кириллицы, можно предложить обработку массивов. Упрощенный вариант кода предложен далее, а результат см. на рис. 1. Думаю, уже по рисунку видать, что на форму были помещены ЭУ ListBox и TextBox.
Систему поиска можно еще усовершенствовать (поиск будет осуществляться по совпадению в любой части элемента)
Используя функцию UCase для преобразования в верхний регистр строки TextBox’а и заполняемых элементов ListBox’а, можно обеспечить поиск вхождений независимо от выбора раскладки клавиатуры.
Тем, кто захочет в своих приложениях использовать раскрывающиеся списки панелей инструментов, не обойтись без детального изучения объекта CommandBarComboBox. Он удобен в использовании и нагляден, но возможности программирования и заполнения его ограничены. Во-первых, количество элементов, которые можно «впихнуть» в список, ограничено числом 32767 — нюанс несущественный, вам вряд ли понадобится такое количество элементов при работе с текстовой базой. Во-вторых, в объекте нельзя запрограммировать несколько колонок, придется обойтись одной. В-третьих, количество символов одного элемента (в т. ч. пробелов) не может превышать 255, а возможности управления объектом (что, кстати, аналогично и для всех объектов панелей инструментов) сводятся к реакции на клик мыши или ENTER. Как обойти первые два неудобства, будет показано далее.
К положительным моментам можно отнести время заполнения этого объекта по сравнению с ЭУ ListBox. А пока отмечу, что выбор объектов для заполнения и организация управления в программе — дело вкуса и умения разработчика.
Текстовый файл с последовательным доступом
Согласитесь, размещение данных для заполнения списков непосредственно в программе является не очень удачным решением. Чтобы отредактировать содержание списков, необходимо вносить изменения в проект и осуществлять перекомпиляцию.
Для начала определимся как будет организована текстовая база данных. Как было оговорено ранее, на предприятии ведется учет в таблице Excel (см. таблицу с условными данными), в которой информация из первых шести колонок должна быть отправлена в текстовый файл, а последующие столбцы являются конфиденциальными.
Так как имеет смысл дать возможность пользователю править файл в текстовом редакторе, то записи из ячеек предлагаю группировать следующим образом:
(строчки из символов * являются разграничением между реквизитами разных контрагентов).
При такой записи данных мы имеем структурную единицу содержимого файла — строку. В этом случае чтение и запись в файле проще организовать строка за строкой, т. е. последовательно. Подобные файлы называются файлами последовательного доступа.
Excel’евский макрос для записи в файл может быть таким:
Итак? текстовый файл сформирован. Заполним ListBox-данными из него:
Добавив в форму TextBox’ы, можете сделать работу с ЭУ ListBox более комфортной.
Имена TextBox’ам даны осмысленные — благодаря этому, поработав над полосой прокрутки SpinButton и ЭУ Label, можно получить ускоренные методы навигации по списку. Например, в конце процедуры инициализации пользовательской формы (UserForm_Initialize), после закрытия файла (Close #FileNo), пропишите установки для SpinButton:
Пример заполнения пользовательской формы реальными данными показан на рис 2.