Проверка и настройка ввода в TextBox

Лабораторная работа №10

Объекты VBA. Свойства. События. Формы.

Цель работы: изучить правила работы с формами.

События обьектов

Обработать можно события следующих обьектов Excel:

ApplicationWorkBoorWorkSheetChart

Функции обработки создаются автоматически. Открывайте Excel и любую кигу. Запускайте редактор VBA. Нас интересует список обьектов в окне VBAProject. Выбирите Лист1 и два раза шелкните по нему. Появится белое окно. Вам нужно выбрать обьект и событие, смотрите как на рисунке ниже, да я чуть не забыл, код VBA еще нужен.

Переключитесь на Лист2, потом назад на Лист1 должно появиться диалоговое окно о том, что активизирован лист.

Многие события имеют параметры. Вот как это.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)......End Sub

И еще события посылают не только по иерархии обьектов вниз, но и вверх. Вот то же событие активации обрабатывается и на верхнем уровне.

Private Sub Workbook_SheetActivate(ByVal Sh As Object) MsgBox (Sh.Name)End Sub

Попробуйте его создать и проверить.

Пользовательские формы

Создавайте новую книгу. Запускайте редактор VBA, как в прошлый раз. Наводим курсор на Microsoft Excel Обьекты, правую кнопку мыши, вставить UserForm.

У Вас появится диалоговое окно (форма), панель ниструментов, и окно свойств. В окне свойств нас интересует совйство Caption, которое позволяет нам изменить заголовок окна. Разместите на форме кнопки. Выбираете инструмент кнопка. Нам надо две кнопки. Одна с именем "тест", а вторая с именем "выход". Имя у кнопок так же меняется в Caption. Все должно быть вот так.

Пора добавить к кнопкам код. Это просто. Двойной шелчок на кнопке и вы попадете в код вызываемый при нажатии кнопки. Давайте для кнопки Test.

Private Sub CommandButton1_Click() MsgBox ("Test Button Press")End Sub

И для второй:

Private Sub CommandButton2_Click() Unload MeEnd Sub

Unload Me выгружает форму из памяти. А вот теперь нам нужно создать макрос для загрузки. Создавайте масрос с именем FormsRun или другим. Код ниже.

Sub FormsRun() UserForm1.ShowEnd Sub

Вот теперь запустите макрос. Появится диалоговое окно. Нажмите кнопку Test, появится сообщение, нажмите кнопку Выход, окно диалога закроется.

Настройка свойств формы

Свойства формы можно менять, для этого достаточно вызвать меню левой кнопкой на форме.

В результате этого появится окно свойств формы.

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

Private Sub CommandButton1_Click() UserForm1.BackColor = RGB(255, 10, 10)End Sub

Если запустить эту форму по нажатию на кнопку, то она станет красная.

Sub test() Load UserForm1 UserForm1.Show Unload UserForm1End Sub

Элементы для формы

Элемент управления, наверно, вторая главная составляющая интерфейса VBA после форм. Элементы управления позволяют Вам добавить в программу функциональность. Их два типа:

· Встроенные - inherent

· Нестандартные - custom

По умолчанию в новом проекте в панели инструментов находятся только стандартные элементы управления.

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

Щелкнув по меню "дополнительные элементы" вы сможете выбрать любой элемент из тех, которые установлены в системе. Например, выберите календарь и нажмите кнопку OK.

После этого значок будет в элементах управления.

Отсюда его можно помещать на форму. Для удаления его с панели инструментов достаточно снять галочку напротив него в дополнительных компонентах.

Проверка ввода на уровне формы (KeyDown, KeyUp, KeyPress)

События:

KeyDownKeyUpKeyPress

Посылаются форме когда производится ввод данных. Событие KeyPress возникает когда пользователь нажимает клавишу, у которой есть ASCII код. Это событие не сгенирируется при нажатии функциональных клавиш. При том эти события есть как у формы:

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) End Sub

Так и у элементов управления TextBox, например:

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) End Sub

А это в свою очередь позволяет проверять ввод. Например, если в поле нужно ввести цифру, то легко проверить, что вводит пользователь. События KeyUp и KeyDown применяются для специальных функциональных клавиш или комбинаций типа Ctrl+Del, так как событие KeyPress их не отловит. Удобно использовать данное событие для проверки заполненности полей. Вот форма:

А вот код для нее. В момент нажатия ввода символа в поле проверяется заполненость полей:

Private Sub Test() Dim ctrl As Control Dim bool As Boolean bool = True For Each ctrl In Controls If TypeName(ctrl) = "TextBox" Then If ctrl.Text = "" Then bool = False End If End If Next ctrl UserForm1.CommandButton1.Enabled = boolEnd Sub Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call TestEnd Sub Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call TestEnd Sub Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call TestEnd Sub

Проверка и настройка ввода в TextBox

У элемента управления есть несколько свойств, которые позволяют на этапе проектирования ограничить ввод пользователя. Вот они:

MaxLengthPasswordCharLocked

Свойство MaxLength позволяет ограничить количество символов, которые будут введены. Если пользователь попробует ввести больше, то будет звуковой сигнал. PasswordChar не дает возможности просматривать вводимые символы заменяя их на звездочки (*). Это полезно, как видно из имени, при вводе пароля. Свойство Locked определяет может ли пользователь редактировать поле. Посмотрите пример:

 

В верхнем поле можно ввести только два символа. Во втором поле вместо символов звездочки, а последнее поле нельзя изменить. Кстати в PasswordChar не обязательно должна быть звездочка, то есть может быть любой другой знак.

 

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

Кстати Locked говорит, что поле для чтения, но в некоторых ситуациях его можно открыть для редактирования программным путем.

Private Sub CommandButton1_Click() TextBox3.Locked = FalseEnd Sub

Тоже самое и с MaxLength:

Private Sub CommandButton1_Click() TextBox3.Locked = FalseEnd Sub

И PasswordChar:

Private Sub CommandButton1_Click() TextBox2.PasswordChar = "x"End Sub

При изменении свойств данные в полях не пропадают.