Чтение онлайн

на главную

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Private Sub UserForm_Activate

cmbOptionPol l.AddItem "Over population"

cmbOptionPol l.AddItem "Global warming"

cmbOptionPol l.AddItem "No time to smell the roses"

cmbOptionPol l.AddItem "No roses to smell"

cmbOptionPol l.AddItem "Taxes on the rich too high"

cmbOptionPol l.AddItem "Too many social services"

cmbOptionPol l.AddItem "Inadequate social services"

cmbOptionPol l.AddItem "HMOs"

End Sub

Технические

подробности размещения элементов из базы данных в списке или комбинированном списке выходят за пределы данной книги, однако вы должны знать, что это возможно.

Для того чтобы найти элемент, который пользователь выбрал или ввел в списке или комбинированном списке, используйте свойство объекта Value в коде. Назначьте свойству соответствующую переменную, как показано ниже: strOption = cmbOptionFoll.Value

Программирование форм

Добавлять элементы управления в формы несложно, а вот, чтобы заставить их делать то, что вам нужно, потребуется немного больше умственной работы и программирования. В этом разделе мы обсудим тонкости процесса программирования форм.

Покажите то, что имеете!

Решив добавить в свою VBA-программу пользовательские формы, вы неизбежно столкнетесь с необходимостью показать эти формы на экране. Иначе зачем эти, пусть даже самые лучшие в мире, формы нужны, если их никто не увидит?

Из-за того, что VBA-программа может при необходимости пользоваться интерфейсом содержащего ее приложения, программа не отображает никакую из ее форм автоматически. В этом отношении VBA отличается от своего собрата Visual Basic, где программа по сути является формой.

Так или иначе, чтобы отобразить форму и сделать ее доступной пользователю, в VBA-программе вам придется добавить программный код.

Загрузка и отображение форм

Процесс отображения формы в VBA состоит из двух шагов;

* загрузка формы в память;

* отображение формы на экране.

Оба этих шага можно осуществить с помощью одного оператора VBA, Но иногда полезно разделить эти шаги и использовать для них отдельные операторы.

Отображение форм осуществляется методом Show. Например, если именем формы является FormICa, то нужно просто напечатать:

FormICa.Show

Заметьте, что Show - это метод объекта Us er Form, поэтому метод добавляется к имени формы после точки-разделителя. Если указанная форма еще не загружена в память, метод Show сначала загрузит форму, а потом сделает ее видимой.

Чтобы загрузить форму в память перед отображением, используйте оператор Load. Load - это не метод, поэтому в данном случае синтаксис другой (по сравнению с использованием Show):

Load ФормАльДеГид

Зачем загружать форму, не отображая ее? Загрузка формы происходит намного дольше, чем ее отображение. Программа любой сложности выполняет немало процедур инициализации (типа чтения данных из файлов, вычисления начальных значений

переменных и создания объектов), поэтому при запуске программы некоторая задержка весьма привычна. Если в это время вы загрузите и свои формы, пользователь отнесется к задержке благосклоннее, чем к такой же задержке во время работы программы. Единственный недостаток предварительной загрузки форм заключается в том, что для них нужна память, которая могла бы использоваться для других целей.

Можно загрузить форму и без оператора Load, выполнив оператор, в котором вызывается свойство либо метод формы или любого из помещенных в нее элементов управления. При этом можно вносить в форму изменения перед тем, как она отображается на экране, Хотя окно свойств редактора Visual Basic позволяет безо всякого программирования управлять тем, как форма будет выглядеть и вести себя на экране, здесь нужно отметить следующее: часто вообще нельзя узнать, как должна выглядеть и что должна делать форма (или ее элементы управления), пока программа не начнет выполняться.

Предположим, например, что в заголовке формы должны отображаться текущие дата и время. Вы не можете предугадать, когда именно пользователь запустит вашу программу, поэтому вам придется поручить VBA указать дату и время за вас. Это можно сделать, например, так:

Sub DisplayDateCaptionedForm

DateCaptionedForm.Caption = Now

DateCaptionedForm.Show

End Sub

Аналогично можно заставить надпись или текстовое поле формы отображать информацию о том, что в данный момент выделено в VBA-приложении. На рис. 10.24 показано то, что можно увидеть в результате выполнения следующей процедуры VBA, связанной с подходящей формой в Visio:

Sub DisplayShowSelectionForm

Dim ItemCount As integer, Message As String

Items = ActiveWindow.Selection.Count

Message = "Выделено объектов: " & CStr(Items) S "."

ShowSelectionForm.lblCountOfItems.Caption = Message

ShowSelectionForm.Show

End Sub

Рис. 10.24. В этой программе содержание текста надписи выясняется непосредственно перед отображением формы

Обратите внимание на строку программного кода, в которой изменяется свойство элемента управления "'надпись" в форме:

ShowSelectionForm.lblCountOfItems.Caption = Message

Технически невозможно получить доступ к свойству или методу формы до тех пор, пока форма не будет загружена, Однако вам не нужно писать для этого явный оператор. VBA автоматически загружает форму, как только потребуется выполнить оператор, ссылающийся на одно из ее свойств или на один из ее методов. Ссылка на свойство или метод любого из элементов управления в форме порождает тот же эффект.

Пример из предыдущего раздела демонстрирует один из способов внесения изменений в форму перед ее отображением на экране - из стандартной процедуры обычного модуля.

Поделиться:
Популярные книги

Авиатор: назад в СССР 12+1

Дорин Михаил
13. Покоряя небо
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 12+1

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Кровавая весна

Михайлов Дем Алексеевич
6. Изгой
Фантастика:
фэнтези
9.36
рейтинг книги
Кровавая весна

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Начальник милиции. Книга 3

Дамиров Рафаэль
3. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 3

Не грози Дубровскому!

Панарин Антон
1. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому!

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Муж на сдачу

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Муж на сдачу

Кодекс Крови. Книга I

Борзых М.
1. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга I

Польская партия

Ланцов Михаил Алексеевич
3. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Польская партия

Лорд Системы

Токсик Саша
1. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
4.00
рейтинг книги
Лорд Системы

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2