- •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
12.2.События объекта Worksheet
События на уровне рабочего листа возникают в случае его активизации или деактивизации, изменений в нем самом или в сводных таблицах.
Событие Activate
Событие Activate возникает, когда лист становится текущим. Напишем программу, которая выполняется при активизации листа Лист1 и выводит на экран его имя:
Private Sub Worksheet_Activate()
MsgBox "Активный лист - " & ActiveSheet.Name
End Sub
Для того чтобы ввести эту программу:
В окне проекта щелкните Лист1 (Рис. 11 -38Рис. 10 -21).
В списке объектов выберите WorkSheet, а в списке процедур – событие Activate (Рис. 11 -38)
Рис. 11‑38.
Введите код.
Перейдите в Excel и протестируйте программу. Обратите внимание: при щелчке по Лист2 сообщение не выводится!
Событие Deactivate
Событие Deactivate возникает, когда лист становится неактивным. Для Лист1 введите следующий код и протестируйте работу программы:
Private Sub Worksheet_Deactivate()
MsgBox ActiveSheet.Name & " стал неактивным!"
End Sub
Событие SelectionChange
Событие SelectionChange (в самом простом случае) возникает тогда, когда текущей становится другая ячейка (либо в результате щелчка мышкой по другой ячейке, либо после нажатия клавиши [Enter], либо после нажатия клавиш передвижения курсора).
Для Лист2 напишем программу, которая выводит адрес текущей ячейки. Для этого:
В модуле Лист2 наберите следующий код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "Адрес текущей ячейки - " & ActiveCell.Address
End Sub
Протестируйте работу программы:
щелкая мышкой по разным ячейкам;
передвигая курсор клавишами передвижения курсора;
завершив ввод информации в ячейку с помощью клавиши [Enter];
завершив ввод информации в ячейку с помощью кнопки Ввод в строке формул (зеленая галочка). Обратите внимание: в этом случае текущей осталась прежняя ячейка – процедура не выполняется.
Домашнее задание №1
Напишите программу ОткрытиеКниги, которая:
открывает файл C:\St\Случайные числа.xls;
активизирует лист Случ. числа. В случае отсутствия листа выдать соответствующее сообщение и завершить выполнение программы;
в первом столбце находит первую пустую ячейку. Для этого воспользуйтесь управляющей конструкцией While–Wend (см. 8.5 из курса лекций):
НомерСтроки = 1
While Trim(Cells(НомерСтроки,1).Value) <> ""
НомерСтроки = НомерСтроки + 1
Wend
Обратите внимание на встроенную функцию Trim, которая удаляет пробелы с обеих сторон строкового значения. Здесь она используется для того, чтобы ячейку, в которой содержится пробел, тоже считать пустой (у некоторых пользователей есть привычка удалять содержимое ячейки с помощью клавиши Пробел);
разыгрывает 5 случайных чисел и помещает их в 5 ячеек 1-го столбца, начиная с найденной ячейки;
cохраняет измененный файл;
выводит сообщение: Случайные числа разыграны!
На основе программы ОткрытиеКниги напишите программу ОткрытиеКнигиМод, в которой:
прежде чем открывать книгу C:\St\Случайные числа.xls, проверьте, в каком состоянии она находится: существует, закрыта или открыта. Блок проверки «открыта ли книга?» оформите в виде подпрограммы, которая должна быть универсальной для любой книги;
розыгрыш 5 чисел также оформите в виде подпрограммы.
На основе программы СлучайныеЧисла напишите программу СлучайныеЧислаМод, в которой:
если файл C:\St\Случайные числа.xls не существует, выполняется программа СлучайныеЧисла, созданная в 3.1
в противном случае выполняется программа ОткрытиеКнигиМод.
Вызов обеих программ оформите как вызов подпрограмм.
На основе программ СлучайныеЧислаМод и УдалениеФайла напишите программу ЗаменаФайла, в которой:
если файл C:\St\Случайные числа.xls не существует, выполняется программа СлучайныеЧисла;
в противном случае выдается сообщение об его существовании и запрос на замену:
если пользователь щелкает по кнопке Да, то файл удаляется, а затем выполняется программа СлучайныеЧисла;
если пользователь щелкает по кнопке Нет, то выполнение программы прекращается.
Вызов программы СлучайныеЧисла оформите как вызов подпрограммы.
Протестируйте работу программ в разных режимах, когда книга открыта, закрыта, или её не существует. Обратите внимание на ситуацию, когда книга открыта, в неё были внесены изменения, а в настоящий момент она не активна.
