ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.03.2025
Просмотров: 138
Скачиваний: 1
События управляющих элементов
Как и все объекты, управляющие элементы позволяют задавать реакцию на определённые события. При двойном щелчке мышью по управляющему элементу создаётся или открывается процедура обработки события по умолчанию. В основном нам придётся задавать реакцию именно на события по умолчанию. Для кнопки это нажатие кнопки, для текстового поля – изменение введённого текста, для кнопок-флажков и кнопок-переключателей – щелчок мышью по кнопке, для выпадающего списка – изменение (любым способом – вводом и выбором) выбранного элемента списка.
Примеры разработки пользовательских форм
Поиск в диапазоне ячейки с заданным значением
'Процедура обработки события «нажатие на кнопку»
Private Sub ButtonFind_Click()
Dim userRange As Range, cell As Range
DimvalueAsString
'Проверка и определение диапазона
On Error Resume Next
Set userRange = Range(RefEditRange.Text)
If Err.Number <> 0 Then
MsgBox "Неправильный диапазон"
RefEditRange.SetFocus
Exit Sub
End If
On Error GoTo 0
'Проверка и задание искомого значения
IfTextBoxValue.value= ""Then
MsgBox"Введите искомое значение"
TextBoxValue.SetFocus
Exit Sub
Else
value = TextBoxValue.value
End If
'Поиск
For Each cell In userRange
If cell.value = value Then
cell.Select
MsgBox "Найдена ячейка " & cell.Address(False, False)
Exit Sub
End If
Next cell
MsgBox"Ячейка не найдена"
EndSub
'Процедура обработки события «инициализация пользовательской формы»
Private Sub UserForm_Initialize()
RefEditRange.Text = ActiveWindow.RangeSelection.Address
End Sub
Поиск в диапазоне ячейки с заданным значением с учётом регистра
'Процедура обработки события «нажатие на кнопку»
Private Sub ButtonFind_Click()
Dim userRange As Range, cell As Range
Dim value As String, matchCase As Boolean
'Проверка и определение диапазона
...
'Проверка и задание искомого значения
...
'Учитывать регистр?
matchCase=CheckBoxCase.value
'Поиск
For Each cell In userRange
If matchCase And cell.value = value Or _ Not matchCase And LCase(cell.value) = LCase(value) Then
cell.Select
MsgBox "Найдена ячейка " & cell.Address(False, False)
Exit Sub
End If
Next cell
MsgBox"Ячейка не найдена"
EndSub
Добавление нового сотрудника
Private Sub OptionButtonStaff_Click()
ComboBoxPost.value = ""
ComboBoxPost.RowSource = "Лист4!B1:B5"
End Sub
Private Sub OptionButtonTeachers_Click()
ComboBoxPost.value = ""
ComboBoxPost.RowSource = "Лист4!A1:A4"
End Sub
Private Sub TextBoxSurname_Change()
If TextBoxSurname.value <> "" And TextBoxName.value <> "" And _ TextBoxFatherName.value <> "" Then
ButtonAdd.Enabled = True
Else
ButtonAdd.Enabled = False
End If
End Sub
Использование управляющих элементов на рабочем листе
Практически все управляющие элементы можно разместить непосредственно на рабочем листе. Для этого необходимо нажать кнопку Вставить, находящуюся в группеЭлементы управленияна вкладкеРазработчик. Управляющие элементыкнопка-флажок,кнопка-переключатель,списокивыпадающий списокмогут быть легко связаны с ячейкой рабочего листа. Это избавляет от необходимости программировать процедуры обработки событий.
В ячейке, связанной с кнопкой-флажком, отображается значение истинаилиложь.
В ячейке, связанной с группой кнопок-переключателей, отображается номер выбранного переключателя.
Список и выпадающий список можно связать с диапазоном, из которого будут браться элементы списка, и с ячейкой-результатом, куда будет записан номер выбранного элемента.
Стандартные диалоговые окна
Функция vba InputBox
Функция VBA InputBoxзапрашивает у пользователя одно значение. Она всегда возвращает строку, поэтому при необходимости нужно преобразовывать введённую строку в значение нужного типа. ФункцияInputBoxимеет следующий синтаксис:
InputBox(Prompt [, Title] [, Default] [, xpos] [, ypos] [, Helpfile, Context])
Функция имеет один обязательный параметр Prompt– запрос, отображаемый в окне ввода. Также можно указать заголовок окна (Title), значение по умолчанию, вставляемое в поле ввода (Default), позицию окна на экране (xpos,ypos) и раздел справочной системы (Helpfile,Context). Окно ввода имеет две кнопки –ОКиОтмена. При нажатии кнопкиОтменафункция возвращает пустую строку.
Dim str As String
str = InputBox("Введите строку")
Для ввода значений не строкового, а другого типа необходимо использовать функции преобразования – CBool,CByte,CCur,CDate,CDbl,CInt,CLng,CSng,CStr,CVar.
Dim n As Integer, str As String
On Error Resume Next
n = CInt(InputBox("Введите n:", "Ввод", 5))
If Err.Number <> 0 Then Exit Sub
...
On Error GoTo 0
Метод InputBox объектаApplication
Метод InputBoxобъектаApplicationимеет три преимущества по сравнению с функциейInputBox:
возможность задать тип возвращаемого значения;
возможность указать диапазон рабочего листа;
автоматическая проверка правильности введённых данных.
Метод InputBoxимеет следующий синтаксис:
InputBox(Prompt [, Title] [, Default] [, Left] [, Top] [, Helpfile, Context] [, Type])
Метод InputBoxимеет те же параметры, что и функцияInputBox, и один дополнительный параметрType, который указывает, данные какого типа должен возвращать метод. Этот параметр является необязательным, и в случае его отсутствия метод возвращает строку. Если введённое значение не соответствует требуемому типу, приложениеMicrosoftExcelвыдаёт сообщение об ошибке и позволяет пользователю ввести другое значение.
|
Код |
Тип возвращаемого значения |
|
0 |
Формула |
|
1 |
Число |
|
2 |
Строка |
|
4 |
Логическое значение |
|
8 |
Диапазон |
|
16 |
Ошибка |
Range("F2").value=Application.InputBox("Введите число", "Ввод числа",Type:=1)
Range("F3").value=Application.InputBox("Введите строку", "Ввод строки",Type:=2)
Range("F4").value=Application.InputBox("Введите логическое значение", _
"Ввод логического значения", Type:=4)
Range("F1").value=Application.InputBox("Введите формулу", "Ввод формулы",Type:=0)
Sub EraseRange()
Dim userRange As Range
On Error GoTo Canceled
Set userRange = Application.InputBox(Prompt:="Удаляемый диапазон:", _ Title:="Удаление диапазона", _ Default:=Selection.Address, Type:=8)
userRange.Clear
userRange.Select
Canceled:
End Sub
Функция vba MsgBox
Функция VBA MsgBoxпредоставляет пользователю простой способ отображения сообщения. Также она возвращает реакцию пользователя на запрос. ФункцияMsgBoxимеет следующий синтаксис:
MsgBox(Prompt [, Buttons] [, Title] [, Helpfile, Context])
Параметр Buttonsопределяет, какие кнопки и значки будут отображены в окне.
|
Константа |
Значение |
Назначение |
|
vbOKOnly |
0 |
Отображается только кнопка ОК (по умолчанию) |
|
vbOKCancle |
1 |
Отображаются кнопки OK и Отмена |
|
vbAbortRetryIgnore |
2 |
Отображаются кнопки Прервать, Повтор и Пропустить |
|
vbYesNoCancel |
3 |
Отображаются кнопки Да, Нет и Отмена |
|
vbYesNo |
4 |
Отображаются кнопки Да и Нет |
|
vbRetryCancel |
5 |
Отображаются кнопки Повтор и Отмена |
|
vbCritical |
16 |
Отображается значок важного сообщения |
|
vbQuestion |
32 |
Отображается значок запроса |
|
vbExclamation |
48 |
Отображается значок предупреждающего сообщения |
|
vbInformation |
64 |
Отображается значок информационного сообщения |
|
vbDefaultButton1 |
0 |
По умолчанию выделена первая кнопка |
|
vbDefaultButton2 |
256 |
По умолчанию выделена вторая кнопка |
|
vbDefaultButton3 |
512 |
По умолчанию выделена третья кнопка |
Функция MsgBoxвозвращает число, соответствующее кнопке, нажатой пользователем.
|
Константа |
Значение |
Нажатая кнопка |
|
vbOK |
1 |
ОК |
|
vbCancel |
2 |
Отмена |
|
vbAbort |
3 |
Прервать |
|
vbRetry |
4 |
Повтор |
|
vbIgnore |
5 |
Пропустить |
|
vbYes |
6 |
Да |
|
vbNo |
7 |
Нет |
MsgBox("Сообщение", vbOKOnly + vbInformation, "Заголовок")
ans = MsgBox("Сообщение", vbOKCancel + vbQuestion, "Заголовок")
...
ans = MsgBox("Сообщение", vbRetryCancel + vbCritical, "Заголовок")
...
ifMsgBox("Сообщение", vbYesNo + vbExclamation +vbDefaultButton2, _ "Заголовок") =vbYesThen
...
Else
...
End If