- •Информатика Сборник лабораторных работ по программированию в среде Visual Basic for Applications
- •Содержание
- •Введение
- •Лабораторная работа №1. Vba. Основные понятия. Среда разработки. Основы пРоГраммирования. Переменные
- •Среда программирования vba
- •Основы программирования на vba
- •Переменные
- •Математические операторы
- •Лабораторная работа №2. Диалоговые окна
- •Контрольные вопросы
- •Лабораторная работа № 3. Разветвляющиеся алгоритмы
- •1. Операторы условия if...Then
- •1.1 Строчный оператор If…Then…Else
- •1.2 Блочный условный оператор
- •1.3 Вложенные операторы If
- •1.4 Логические операции
- •2. Безусловный переход GoTo
- •3. Оператор выбора – переключатель
- •5. Задачи для самостоятельного решения!
- •Лабораторная работа № 4. Циклы со счетчиком
- •Лабораторная работа № 5. Циклы с условием
- •1. Циклы с предусловием
- •2. Цикл с постусловием
- •3. Цикл For Each … Next
- •4. Задания к лабораторной работе
- •5. Контрольные вопросы
- •Лабораторная работа № 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
