Начинаем углубляться в VBA на практике. Делаем поле со списком, которое ищет нужного клиента, а так же добавляем некоторые вспомогательные кнопки ...
Готовую форму справочника Клиентов можете посмотреть в БД: Sklad_5.zip.
Открываем конструктор новой формы и устанавливаем в свойствах формы в качестве Источника записей таблицу Клиенты, задаем подпись формы и устанавливаем режим по умолчанию как простая форма (другие заданные свойства смотри в базе). Затем, установим для формы разделы заголовка и примечания.
Раздел примечания нам не понадобится, поэтому его мы минимизируем по высоте. А в заголовок вставим рисунок, путем перетаскивания с панели инструментов рисунок. В области данных вставим и подпишем поля, необходимые для заполнения. Таким образом имеем:
В принципе, данная форма готова к употреблению (заметьте - обошлись без всякого VBA), но для облегчения жизни пользователей можем ее, что называется, навернуть всякими сервисами. Например, сделаем для начала кнопки перехода по записям, создания новой записи и кнопку закрытия формы. В принципе, мы можем все эти стандартные действия выполнять и имеющимися средствами, но возможно наши будущие пользователи будут малообразованны в компьютерном деле и поэтому для них мы сделаем большие такие кнопочки:) Выбираем на панели инструментов элемент кнопка и рисуем в области данных контур будущей кнопки. На следующем шаге нам высвечивается мастер создания кнопки, в котором мы задаем необходимые нам свойства кнопки:
Таким образом, создаем все 4 кнопки и немного придадим им компактный вид:
Наступило время открыть модуль формы и посмотреть, какой VBA-код нам написал мастер создания кнопок. Для перехода в модуль формы нажимаем кнопку на панели инструментов. Просматривая процедуры, которые создал мастер, мы сможем изучить азы программирования на VBA.
Следующим нашим шагом будет создание свободного поля с выпадающим списком Клиентов. Свободное поле означает, что свойство поля "Данные" не задано. Причем работать оно должно так: при выборе Клиента из списка, мы автоматически переходим на запись этого Клиента. Это поле размещаем в разделе заголовка формы, задаем для него все необходимые свойства так, что реально поле будет хранить выбранный Код клиента, а визуально будет отображать его название. К стати сказать, по такому принципу строятся большинство полей со списком (и просто списков), где необходимо что-то выбирать. На событие "после обновления" напишем следующий VBA-код:
Private Sub СписокКлиентов_AfterUpdate() 'Обработка ошибок необходима для 'ситуации, когда пользователь 'вводит пустое поле (Me!СписокКлиентов = Null) On Error GoTo Met1 'Поиск записи, соответствующей этому элементу управления Me.RecordsetClone.FindFirst "[Код] = " & CStr(Me!СписокКлиентов) Me.Bookmark = Me.RecordsetClone.Bookmark Met1: 'В случае возникновении ошибки попадем сюда Me!Клиент.SetFocus End Sub
Возможна такая ситуация, когда пользователь вводит нового Клиента, становится на список клиентов, а там его не находит. Такое происходит потому, что список клиентов наполняется при открытии формы и о том, что мы ввели нового Клиента это поле совершенно не знает, и не будет знать до тех пор, пока мы его не попросим заново произвести запрос к таблице клиентов и обновиться. Для этого на событие "получение фокуса" напишем такую инструкцию:
Private Sub СписокКлиентов_GotFocus() 'Обработка ошибок необходима для 'ситуации, когда заполнены не все 'обязательные поля On Error GoTo Met1 Me.Refresh 'сбрасываем текущие данные в таблицу Me!СписокКлиентов.Requery 'обновляем поле со списком клиентов Met1: End Sub
На этом этапе форма готова к употреблению :) Успехов в изучении и до новых встреч !