Шрифт:
В приведенной процедуре для определения первой пустой строки в заполняемой базе данных о туристах используется инструкция
НомерСтроки = Application.CountA(ActiveSheet.Columns(1)) + 1,
правая часть которой вычисляет число непустых ячеек в первом столбце активного рабочего листа. Переменной НомерСтроки присваивается значение на единицу большее, чем число непустых строк, что естественно, так как ей должен быть присвоен номер первой непустой строки базы данных. Подобные инструкции довольно часто используются при разработке приложений, поэтому следует обратить на них внимание.
Private Sub SpinButton1_Change
'Процедура ввода значения счетчика в поле ввода
With UserForm1
TextBox3.Text = CStr(.SpinButton1.Value)
End With
End Sub
Private Sub TextBox3_Change
'Процедура установки значения счетчика из поля ввода
With UserForm1
SpinButton1.Value = CInt(.TextBox3.Text)
End With
End Sub
Private Sub CommandButton2_Click
'Процедура закрытия диалогового окна
UserForm1.Hide
Application.Caption = Empty
'Установка заголовка окна приложения по умолчанию
End Sub
Private Sub UserForm_Initialize
'Процедура вызова диалогового окна
'и задание элементов раскрывающегося списка
'Задание пользовательского заголовка окна приложения
Application.Caption = «Регистрация. База данных туристов фирмы 'Балашов-Тур'»
Application.DisplayFormulaBar = False 'Закрытие строки формул окна Excel
With CommandButton1
Default = True
ControlTipText = «Ввод данных в базу данных»
End With
With CommandButton2
Cancel = True
ControlTipText = «Кнопка отмены»
End With
OptionButton1.Value = True
With ComboBox1
'Задание элементов раскрывающегося списка
List = Array(«Лондон», «Париж», «Берлин»)
ListIndex = 0
End With
'Задание начального и минимального значений счетчика и вывод текста
SpinButton1.Value = 1
SpinButton1.Min = 1
ЗаголовокРабочегоЛиста
UserForm1.Show
'Активизация диалогового окна
End Sub
Sub ЗаголовокРабочегоЛиста
'Процедура создания заголовков полей базы данных
If Range(«A1»).Value = «Фамилия» Then Range(«A2»).Select Exit Sub 'Если заголовки существуют, то досрочный выход из процедуры
End If 'Если заголовки не существуют, то создаются заголовки полей
ActiveSheet.Сеlls.Clear
Range(«A1:H1»).Value = Array(«Фамилия», «Имя», «Пол», «Выбранный Тур», «Оплачено», «Фото», «Паспорт», «Срок»)
Range(«А: А»).ColumnWidth = 12
Range(«D: D»).ColumnWidth = 14.4
Range(«2:2»).Select
'Закрепляется первая строка с тем, чтобы она всегда отображалась на экране
ActiveWindow.FreezePanes = True
Range(«A2»).Select
'К каждому заголовку поля базы данных присоединяется примечание
Range(«Al»).AddComment
Range(«A1»).Comment.Visible = False
Range(«A1»).Comment.Text Text:="Фамилия клиента"
Range(«B1»).AddComment
Range(«B1»).Comment.Visible = False
Range(«B1»).Comment.Text Техt:="Имя клиента"
Range(«C1»).AddComment
Range(«C1»).Comment.Visible = False
Range(«C1»).Comment.Text Text:="Пол клиента"
Range(«D1»).AddComment
Range(«D1»).Comment.Visible = False
Range(«D1»).Comment.Text Text:="Направление" & Chr(lO) & «выбранного тура»
Range(«E1»).AddComment
Range(«E1»).Comment.Visible = False
Range(«E1»).Comment.Text Text:="Путевка оплачена?" & Chr(lO) & «(Да/Нет)»
Range(«F1»).AddComment
Range(«F1»).Comment.Visible = False
Range(«F1»).Comment.Text Text:="Фото сданы" & Chr(lO) & «(Да/Нет)»
Range(«G1»).AddComment
Range(«G1»).Comment.Visible = False
Range(«G1»).Comment.Text Text:="Наличие паспорта" & Chr(lO) & "(Да/Нет)»
Range(«H1»).AddComment
Range(«H1»).Comment.Visible = False
Range(«H1»).Comment.Text Text:="Продолжительность" & Chr(lO) & «поездки»
End Sub
При написании процедура ЗаголовокРабочегоЛиста лучше всего воспользоваться MacroRecorder, который переведет производимые действия по созданию примечаний пользователем вручную на язык VBA.
Пример 58. Модифицировать форму примера 57 и, соответственно, базу на рабочем листе (ввести новую колонку, заголовок и комментарий к нему) для хранения еще одного параметра – Постоянный клиент (это дает, например, скидку при оплате).
9.2. Конструирование пользовательского интерфейса
Microsoft Excel содержит встроенные средства по созданию и управлению базами данных. Это:
• создание таблицы базы данных (осуществляется при заполнении заголовков полей таблицы);
• заполнение таблицы базы данных (меню <Данные> <Форма>);
• сортировка записей таблицы (меню <Данные> <Сортировка>);
• фильтрация записей таблицы по определенному признаку или группе признаков (меню <Данные> <Фильтр>) и др.
С помощью этих средств осуществляется управление базой в Excel. Данный факт весьма облегчает задачу автоматизации использования баз в Excel. Сводится это к возможности применения макрорекордера для программной реализации базы в Excel с помощью VBA.
Пример 59. Создать приложение с пользовательским интерфейсом по заполнению и обработке базы данных туристической фирмы «Балашов-Тур». База данных состоит из двух рабочих листов: «База Данных» и «Фильтр».
После загрузки программа сама будет создавать свой интерфейс, отображать название окна приложения и, если на рабочем листе нет заголовков полей, создавать их. Интерфейс программы будет состоять из нескольких диалоговых окон.
Технология выполнения
Первое диалоговое окно уже существует (пример 57), оно реализует заполнение базы данных. С помощью второго диалогового окна будет реализовываться сортировка записей таблицы.
Примечание. Пересохраните работу Пример57 как Пример59.
Второе диалоговое окно (UserForm2, рис. 113) позволяет осуществлять сортировку записей таблицы (рис. 114) по одному из двух критериев:
• продолжительности тура;
• фамилии.
Рис. 113. Форма 2 для примера 59
Также предоставляется выбор сортировки по возрастанию или по убыванию. Интересной особенностью этого диалогового окна является название второй кнопки. При появлении на экран кнопка носит название «Отмена», а после осуществления сортировки получает название «Закрыть».
Для облегчения написания кода сортировки следует воспользоваться макрорекордером. После включения записи выполните следующие шаги:
1) выделите записи базы данных;
2) выберите в меню <Данные> <Сортировка>;
3) при появлении диалогового окна выберите поле, по которому осуществляется сортировка, а также ее направление;
4) нажмите Enter;
5) выключите макрорекордер.
При просмотре полученного макроса можно обнаружить несколько операторов, которые станут шаблоном для кода. Это выделение области сортировки (записей базы) и собственно сама процедура сортировки. Примерно так: