- •1.Программирование в vba. Объекты Application, Workbook, Worksheet и Range
- •2.Редактор Visual Basic
- •2.1.Запуск программы
- •2.1.1.Панель инструментов Стандарт
- •2.2.Отладка программ
- •2.2.1.Ошибки при написании программ
- •2.2.1.1.Ошибки компиляции
- •2.2.1.2.Ошибки выполнения
- •2.2.2.Инструкция Option Explicit
- •2.2.3.Пошаговое выполнение программ
- •2.2.4.Точка останова (Toggle Breakpoint)
- •2.2.5.Отслеживание значений свойств и переменных
- •3.Объекты Application, Workbook, Worksheet и Range. Встроенные функции Dir, MkDir, MsgBox, InputBox
- •3.1.Программа СлучайныеЧисла
- •3.2.Программа УдалениеКниги
- •3.3.Программа СлучайныеЧислаОформление
- •4.Переменные
- •4.1.Объектные переменные
- •4.2.Пользовательский тип данных
- •5.Массивы
- •5.1.1.Функция Erase
- •5.1.2.Функции lBound и uBound
- •6.Подпрограммы. Функции. Область видимости переменных, подпрограмм и функций.
- •6.1.Вызов подпрограммы
- •6.2.Передача данных при вызове программы
- •6.2.1.Передача по ссылке и по значению
- •6.3.Функции
- •6.4.Область видимости переменных
- •6.4.1.Переменные уровня процедуры
- •6.4.2.Переменные уровня модуля
- •6.4.3.Переменные уровня проекта
- •6.4.4.Сохраняемые переменные
- •6.4.5.Область видимости подпрограмм и функций
- •6.4.6.Сохраняемые подпрограммы и функции
- •7.Управляющие структуры: If-Then-Else, Select Case, For-Next, While-Wend, Do-Loop, For-Each-Next
- •8.Инструкция With
- •9.Встроенные функции vba
- •9.1.Математические функции
- •9.2.Функции проверки типов
- •9.3.Функции преобразования форматов
- •9.4.Функции обработки строк
- •9.5.Функции времени и даты
- •10.Обработка ошибок: инструкция On Error
- •11.Пользовательский интерфейс
- •11.1.Создание формы (UserForm) и добавление кнопок (СоmmandButton)
- •11.2.Вывод формы на экран (запуск формы)
- •11.3.Поле (TextBox) и надпись (Label).
- •11.4.Список (ListBox) и поле со списком (ComboBox)
- •11.4.1.Список (ListBox)
- •11.4.2.Определение выбранных элементов списка
- •11.4.3.Поле со списком (ComboBox)
- •11.4.4.Определение выбранного элемента
- •11.4.5.Создание взаимосвязанных элементов управления
- •11.5.Флажок (CheckBox)
- •11.6.Выключатель (ToggleButton)
- •11.7.Переключатель (OptionButton)
- •11.8.Счетчик (SpinButton)
- •11.9.Создание нестандартных меню и панелей инструментов.
- •11.9.1.Пример создания/удаления панели инструментов
- •11.9.2.Пример создания/удаления меню
- •12.События объектов Workbook и Worksheet
- •12.1.События объекта Workbook
- •12.2.События объекта Worksheet
- •Домашнее задание №1
- •Домашнее задание №2 и №3. Типовые варианты.
- •Вариант 1. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 2. Домашнее задание №2
- •Списочный состав института
- •Домашнее задание №3
- •Вариант 3. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 4. Домашнее задание №2
- •Домашнее задание №3
- •Вариант 5. Домашнее задание №2
- •Домашнее задание №3
4.Переменные
Примеры использования переменных присутствуют во всех программах данного практикума. Здесь же мы познакомимся поближе с объектными переменными и переменными пользовательского типа.
4.1.Объектные переменные
Как вы знаете, объектная переменная используется для ссылки на объект. Они объявляются и задаются немного иначе, чем остальные переменные. Ниже представлен фрагменте кода, в котором объектная переменная сначала объявляется, а затем ей присваивается значение: Range1- это первая ячейка первого листа.
Dim Range1 As Object
Set Range1 = Worksheets(1).Range("A1")
Предположим, что в программе Оформление из параграфа 3.3 (стр. 29) нам необходимо указывать «полный» адрес диапазона ячеек A1:A10. Очевидно, что программа окажется перегруженной и трудной для восприятия.
Sub ОформлениеПолнаяСсылка()
Workbooks("Случайные числа.xls"). _
WorkSheets("Случ. числа").Range("A1:A10").Font.Italic = True
With Workbooks("Случайные числа.xls"). _
WorkSheets("Случ. числа")Range("A1:A10"). _
Borders(xlEdgeLeft)
.LineStyle = xlDot
.ColorIndex = 5
End With
. . .
' на досуге можете ввести остальные команды!
End Sub
Введя объектную переменную, мы существенно сократим программу, сделаем её простой и более наглядной. В следующем коде объектная переменная MyRange – это диапазон ячеек A1:A10, расположенный в книге Случайные числа.xls на листе Случ. числа:
|
|
Sub ОформлениеОбъектнаяПеременная() |
|
|
Dim MyRange As Object |
|
|
Set MyRange = Workbooks("Случайные числа.xls"). _ WorkSheets("Случ. числа").Range("A1:A10") |
|
|
MyRange.Font.Italic = True |
|
|
With MyRange.Borders(xlEdgeLeft) |
|
|
.LineStyle = xlDot |
|
|
.ColorIndex = 5 |
|
|
End With |
|
|
With MyRange.Borders(xlEdgeTop) |
|
|
.LineStyle = xlDot |
|
|
.ColorIndex = 5 |
|
|
End With |
|
|
With MyRange.Borders(xlEdgeBottom) |
|
|
.LineStyle = xlDot |
|
|
.ColorIndex = 5 |
|
|
End With |
|
|
With MyRange.Borders(xlEdgeRight) |
|
|
.LineStyle = xlDot |
|
|
.ColorIndex = 5 |
|
|
End With |
|
|
With MyRange.Borders(xlInsideHorizontal) |
|
|
.LineStyle = xlDot |
|
|
.ColorIndex = 5 |
|
|
End With |
|
|
Range("A1").Select |
|
|
End Sub |
Задания:
В Модуль3 наберите программу ОформлениеОбъектнаяПеременная.
На листе Случ. числа очистите форматы, активизируйте другую книгу и запустите программу ОформлениеОбъектнаяПеременная.
4.2.Пользовательский тип данных
Теперь создадим пользовательский тип данных Персона. Пользовательские типы данных определяются как комбинации стандартных типов данных VBA. Главным достоинством переменной пользовательского типа является то, что в неё можно помещать несколько значений различных типов. Это особенно выигрышно при создании пользовательских массивов, так как в обычном массиве могут использоваться элементы только одного типа.
В Модуль3 наберите следующий код и выполните программу:
Type Персона
Имя As String
ДатаРождения As Date
Возраст As Integer
End Type
Sub ПользовательскийТипПеременной()
Dim User1 As Персона
User1.Имя = "Иванов"
User1.ДатаРождения = #2/23/75#
User1.Возраст = Year(Date) - Year(User1.ДатаРождения)
MsgBox User1. Имя & ", возраст " & User1.Возраст & _
" дата рождения " & User1.ДатаРождения
End Sub
Обратите внимание на встроенные функции Date, которая возвращает текущую системную дату и Year, которая возвращает год из указанной даты. Первый раз год возвращается из текущей даты, которую определяет функция Date, второй раз – из даты рождения (третьего элемента пользовательского типа), которая объявлена как Date.
Задание:
В Модуль3 напишите программу Данные_Сотрудника, которая, по запросу пользователя, выводит на экран данные о сотруднике (Ф.И.О., Кафедра, Должность, Возраст). Информация хранится в базе данных Excel C:\St\Институт.xls на листе Кадры и имеет следующую структуру:
Диалог программы с пользователем осуществляется с помощью встроенной функции InputBox:
сначала запрашивается название кафедры:
затем Ф.И.О.:
Выходные данные выводятся с помощью MsgBox в следующем виде:
При написании кода создайте пользовательский тип данных Сотрудник, элементами которого являются Имя, Должность, Возраст.
Предусмотреть обработку событий, связанных с различными состояниями исходной БД: закрыта, открыта, не существует.
