Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник по VBA.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
6 Мб
Скачать
☆

Примеры создания программ для работы с объектами окна диалога

Пример 1. Создать окно диалога, содержащее поля для ввода фамилии и имени. Значения этих полей записать в электронную таблицу.

На рабочем листе "Лист1" создать ЭТ следующего вида:

А B C D

1 Фамилия Имя

2

Создадим форму, которая будет содержать 2 поля для ввода текста (имени и фамилии), 2 надписи и 2 кнопки. При нажатии кнопки ВВОД информация из текстовых полей будет записываться в ЭТ, а при нажатии кнопки КОНЕЦ будет происходить выход из программы.

Label2

TextBox2

CommandButton2

TextBox1

CommandButton1

Label1

Установим свойства объектов:

Объект

Свойство

Значение

Label1

Caption

Фамилия

Label2

Caption

Имя

CommandButton1

Caption

Ввод

CommandButton2

Caption

Конец

Кнопке КОНЕЦ назначим процедуру :

Private Sub CommandButton2_Click()

End

End Sub

Кнопке ВВОД назначим процедуру:

Option Explicit

Private Sub CommandButton1_Click()

Dim Фамилия, Имя As String

Dim Row As Integer

Row = Application.CountA(Sheets("Лист1").Range("А:А")) + 1

With UserForm1

Фамилия = .TextBox1.Text

Имя = .TextBox2.Text

End With

With Sheets("Лист1")

.Cells(Row, 1).Value = Фамилия

.Cells(Row, 2).Value = Имя

End With

With UserForm1

.TextBox1.Text = ""

.TextBox2.Text = ""

End With

End Sub

Некоторые объяснения к программе :

В VBA диапазон "А:А" означает столбец А. Функция СЧЕТЗ в русскоязычной версии Еxcel подсчитывает число непустых ячеек в выделенном диапазоне. Ее эквивалентом в англоязычной версии является функция CountA. Т.о. функция

Row = Application.CountA(Sheets("Лист1").Range("А:А")) + 1

вычисляет число непустых ячеек в столбце А.

В переменную целого типа Row записывается количество непустых ячеек столбца А и значение переменной увеличивается на 1 для того, чтобы считанная из текстовых полей информация записывалась в пустые строки таблицы.

Оператор With – End With используется для удобства при работе с несколькими свойствами или методами одного и того же объекта.

Например, конструкция

With Sheets("Лист1")

.Cells(Row, 1).Value = Фамилия

.Cells(Row, 2).Value = Имя

End With

без оператора With – End With эквивалентна конструкции вида :

Sheets("Лист1").Cells(Row, 1).Value = Фамилия

Sheets("Лист1").Cells(Row, 2).Value = Имя

Sheets и Cells – это объекты VBA, обозначающие рабочий лист и клетку с соответствующими координатами.

Программа запускается в окне отладчика клавишей F5 или кнопкой "Запуск подпрограммы". Для запуска программы можно также создать командную кнопку на рабочем листе Excel, назначив ей соответствующий модуль. Например, такой

Sub Кнопка1_Щелкнуть()

UserForm1.Show

End Sub

Кнопка на рабочем листе создается с помощью Панели инструментов Формы (Элементы управления). Макрос назначается двойным щелчком левой кнопки мыши или с помощью контекстного меню.

Пример2. Создать окно диалога, содержащее 2 переключателя, 2 надписи и 2 кнопки. В зависимости от того, какой переключатель установлен, в клетку А1 электронной таблицы будет записываться название этого переключателя.

OptionButton1

Label1

CommandButton1

Окно формы имеет вид:

OptionButton2

Label2

CommandButton2

Установим свойства объектов:

Объект

Свойство

Значение

Label1

Caption

Муж

Label2

Caption

Жен

CommandButton1

Caption

Ввод

CommandButton2

Caption

Конец

Кнопка Ввод считывает значение переключателя, кнопка Конец осуществляет выход из программы.

!!! При работе с переключателями необходимо, чтобы свойство Loked для них имело значение False.

Кнопке Конец назначим процедуру :

Private Sub CommandButton2_Click()

End

End Sub

Кнопке Ввод назначим процедуру:

Option Explicit

Private Sub CommandButton1_Click()

Dim Пол As String

With UserForm1

If .OptionButton1 = True Then Пол = "Муж"

If .OptionButton2 = True Then Пол = "Жен"

End With

With Sheets("Лист1")

.Cells(1, 1) = Пол

End With

End Sub

Пример3. Создать окно диалога, содержащее 2 флажка, 2 надписи и 2 кнопки. Если флажки установлены, то в клетках ЭТ А1 и А2 записывается слово "Да", в противном случае "Нет".

CheckBox1

Label1

CommandButton1

Окно формы имеет вид:

CheckBox2

Label2

CommandButton2

Установим свойства объектов:

Объект

Свойство

Значение

Label1

Caption

Оплачено

Label2

Caption

Паспорт сдан

CommandButton1

Caption

Начало

CommandButton2

Caption

Конец

Кнопка "Начало" считывает значения флажков, кнопка "Конец" – выход из программы.

!!! При работе с флажками свойствам Locked также устанавливается значение False.

Кнопке Конец назначим процедуру :

Private Sub CommandButton2_Click()

End

End Sub

Кнопке Начало назначим процедуру:

Option Explicit

Private Sub CommandButton1_Click()

Dim Паспорт, Оплачено As String

With UserForm1

If CheckBox1.Value = True Then

Оплачено = "Да"

Else

Оплачено = "Нет"

End If

If CheckBox2.Value = True Then

Паспорт = "Да"

Else

Паспорт = "Нет"

End If

End With

With Sheets("Лист1")

.Cells(1, 1) = Оплачено

.Cells(2, 1) = Паспорт

End With

End Sub

Пример4. Создать окно диалога, содержащее список и две кнопки. Выбранное значение записать в клетку А1 ЭТ.

Окно формы имеет вид:

CommandButton1

ListBox1

CommandButton2

Установим свойства объектов:

Объект

Свойство

Значение

CommandButton1

Caption

Начало

CommandButton2

Caption

Конец

Кнопке Конец назначим процедуру :

Private Sub CommandButton2_Click()

End

End Sub

Для кнопки Начало назначим процедуру:

Option Explicit

Private Sub CommandButton1_Click()

ListBox1.Clear

ListBox1.AddItem "Люкс"

ListBox1.AddItem "Одноместный"

ListBox1.AddItem "Двухместный"

End Sub

При нажатии кнопки Начало поле списка очищается командой ListBox1.Clear, а затем формируется поле списка с помощью метода AddItem.

Считывание значения поля списка в клетку А1 осуществляется с помощью процедуры:

Private Sub ListBox1_Click()

Cells(1, 1) = ListBox1

End Sub

Пример5. Создайте окно диалога, содержащее поле со списком и две кнопки. Выбранное значение запишите в клетку А1 ЭТ.

Окно формы имеет вид:

ComboBox1

CommandButton1

CommandButton2

Установим свойства объектов:

Объект

Свойство

Значение

CommandButton1

Caption

Ввод

CommandButton2

Caption

Конец ввода

Для кнопки Конец ввода назначим процедуру:

Private Sub CommandButton2_Click()

End

End Sub

Для кнопки Ввод назначим процедуру:

Private Sub CommandButton1_Click()

Dim Список As String

With UserForm1

Список = .ComboBox1

End With

With Sheets("Лист1")

.Cells(1, 1) = Список

End With

End Sub

Для инициализации поля со списком создадим процедуру:

Option Explicit

Private Sub UserForm_Initialize()

ComboBox1.AddItem "Люкс"

ComboBox1.AddItem "Одноместный"

ComboBox1.AddItem "Двухместный"

ComboBox1.Style = fmStyleDropDownList

End Sub

Пример6. Создайте окно диалога, содержащее поле ввода текста две кнопки и счетчик, значение которого будет считываться в это поле, а затем записываться в клетку А1.

Окно формы имеет вид:

TextBox1

CommandButton2

SpinButton1

Установим свойства объектов:

Объект

Свойство

Значение

CommandButton1

Caption

Запись

CommandButton2

Caption

Конец

Для кнопки Конец назначим процедуру:

Private Sub CommandButton2_Click()

End

End Sub

Для кнопки Запись назначим процедуру записи значения текстового поля в клетку А1:

Private Sub CommandButton3_Click()

Cells(1, 1) = TextBox1

End Sub

Со счетчиком свяжем процедуру:

Private Sub SpinButton1_Change()

TextBox1.Text = CStr(SpinButton1.Value)

End Sub

Данная процедура выводит в текстовое поле текущее значение счетчика, преобразуя числовое значение счетчика в строковую переменную с помощью функции CStr.

Текстовому полю назначим процедуру:

Private Sub TextBox1_Change()

SpinButton1.Value = Cint(TextBox1.Text)

End Sub

Эта процедура используется для синхронизации значения счетчика с содержимым текстового поля, преобразуя текстовое значение поля в числовое с помощью функции Cint.

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

На рис.14 и 15 приведен один из вариантов построения диалогового окна и

ЭТ для заполнения базы данных.

Рис.14

Э лектронная таблица имеет вид:

Рис.15

На рабочем листе ЭТ создана командная кнопка Вычислить, которой назначен макрос:

Sub Вычислить()

UserForm1.Show

End Sub