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 автоматически загружает форму, как только потребуется выполнить оператор, ссылающийся на одно из ее свойств или на один из ее методов. Ссылка на свойство или метод любого из элементов управления в форме порождает тот же эффект.
Пример из предыдущего раздела демонстрирует один из способов внесения изменений в форму перед ее отображением на экране - из стандартной процедуры обычного модуля.