- •Содержание
- •Раздел 1. Быстрый старт 2
- •Раздел 2. Редактор Visual Basic 11
- •Immediate Window (окно проверки) 15
- •Раздел 3. Переменные и типы данных 27
- •Раздел 4. Операторы управления 51
- •Раздел 5. Процедуры, подпрограммы и функции 66
- •Раздел 6. Объекты ms Excel 101
- •Раздел 7. Пользовательские формы 139
- •Immediate Window (окно проверки) 177
- •Введение
- •Раздел 1.Быстрый старт Использование макрорекордера
- •Запись макроса
- •Запуск макроса
- •Абсолютные и относительные ссылки Запись формулы на рабочем листе
- •Макрорекордер
- •Диалоговые окна для ввода/вывода данных
- •Функция InputBox
- •Функция MsgBox
- •Раздел 2.Редактор Visual Basic
- •Окна редактора vb
- •Project Window (окно проекта)
- •Properties Window (Окно свойств)
- •Code (окно программы)
- •Immediate Window (окно проверки)
- •Получение справки
- •Запись процедур
- •Режимы работы с программой
- •Ошибки и их обнаружение
- •Отладка
- •Меню и панели инструментов Visual Basic
- •Панели инструментов Стандартная панель инструментов
- •Панель инструментов отладки
- •Раздел 3.Переменные и типы данных Объявление переменных
- •Важность объявления переменных
- •Область видимости переменных
- •Время жизни переменных
- •Инициализация переменных
- •Операции с элементарными данными
- •Оператор присваивания
- •Выполнение операций
- •Арифметические операции
- •Операции сравнения
- •Оператор Like
- •Логические операции
- •Символьные операции
- •Приоритет операций
- •Операции с другими типами данных
- •Объектные переменные
- •Массивы
- •Динамические массивы
- •Пользовательский тип
- •Раздел 4.Операторы управления
- •Условный оператор If
- •Оператор выбора Select Case
- •Операторы цикла
- •Цикл For…Next
- •Цикл For Each…Next
- •Оператор Set
- •Цикл Do…Loop
- •Цикл While…Wend
- •Раздел 5.Процедуры, подпрограммы и функции
- •Классификация процедур
- •Структура и объявление процедуры
- •Синтаксис объявления процедуры общего типа
- •Синтаксис объявления функции
- •Вызов процедуры
- •Параметры и аргументы
- •Возврат значения функции
- •Использование процедур-функций на рабочем листе
- •Поименованные аргументы
- •Использование необязательных аргументов
- •Использование параметра ParamArray
- •Вызов процедур другого проекта
- •Автопроцедуры
- •Событийные процедуры
- •Рекурсивные процедуры
- •Встроенные функции Классы функций
- •Использование табличных функций
- •Организация интерфейса при помощи встроенных функций
- •Функция MsgBox
- •Функция InputBox
- •Строковые функции
- •Примеры на использование различных строковых функций Функция Format
- •Функция Val
- •Функции Len, Mid
- •Функция Left
- •Функция Instr
- •Функция Chr
- •Математические функции
- •Функции Int и Fix
- •Функция Log
- •Функции Randomize и Rnd
- •Функции даты и времени
- •Примеры функций даты и времени Функции Day, Month, Year, DateSerial
- •Функции Now, Time, Timer
- •Функция WeekDay
- •Функции Hour, Minute, Second
- •Раздел 6.Объекты ms Excel
- •Свойства объектов
- •Методы объектов
- •Модель объектов
- •Коллекции объектов
- •Обращение к объекту Контейнеры
- •Ссылка на объект
- •Оператор With
- •Использование объектных переменных
- •Объект Application
- •Активные объекты
- •Свойства, влияющие на высвечивание на экране Свойство DisplayAlerts (r/w Boolean)
- •Свойства DisplayFormulaBar (r/w Boolean), DisplayStatusBar (r/w Boolean)
- •Свойство ScreenUpdating (r/w Boolean)
- •Свойства Top, Left, Height, Width, UsableWidth, WindowState
- •Свойство Visible (r/w Boolean)
- •Другие свойства объекта Application
- •Методы Метод Calculate
- •Метод CheckSpelling
- •Метод OnTime
- •Метод Wait
- •Коллекции объектов
- •Объекты Workbooks и Workbook
- •Событийные процедуры
- •Объекты Sheets, WorkSheets и WorkSheet
- •Свойства Свойство Name (r/w String)
- •Свойство Type (r/o String)
- •Свойство UsedRange
- •Свойства Next и Previous
- •Свойство Parent
- •Свойство Visible (r/w Boolean)
- •Методы Метод Add
- •Методы Move и Select
- •Событийные процедуры
- •Объект Range
- •Свойства Cвойство Range
- •Свойство Cells
- •Свойство Offset
- •Метод Union и свойство Areas
- •Свойства Column и Row (r/o Integer)
- •Свойства Columns и Rows
- •Свойство CurrentRegion
- •Cвойства, связанные с шириной и высотой ячейки
- •Методы Методы Select и Activate
- •Метод Clear
- •Цветовое оформление объекта Range Свойство ColorIndex
- •Свойство Color
- •Раздел 7.Пользовательские формы
- •Режимы работы с формой
- •Режим конструктора
- •Элементы управления
- •Событийные процедуры
- •Режим выполнения
- •Объекты UserForm и Controls
- •Разработка приложения
- •Приложение 1
- •Конструирование начальной формы
- •Свойства формы и элементов управления
- •Создание событийных процедур
- •Конструирование формы для выбора рабочего листа
- •Создание событийных процедур
- •Элемент ListBox
- •Событийная процедура инициализации формы
- •Завершение разработки приложения
- •Связь формы с ячейками рабочего листа
- •Элемент TextBox
- •Элемент ListBox
- •Приложение 2
- •Конструирование форм
- •Процедуры
- •Приложение a. Справочная система Просмотр объектов, их свойств и методов (Object Browser)
- •Окно Object Browser
- •Панель инструментов Object Browser
- •Выход из Object Browser
- •Интерактивная подсказка
- •Приложение b. Инструментальные средства отладки программ
- •Контрольные точки или точки останова
- •Трассировка или пошаговое выполнение программы
- •Использование объекта Debug
- •Окна отладчика
- •Immediate Window (окно проверки)
- •Окно значения переменной
- •Locals Window (окно локальных переменных)
- •Окно контрольных значений (Watches)
- •Приложение c. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Создание событийных процедур
При разработке событийной процедуры нажатия на кнопку Go предусмотрим возможность выполнения анализа текста не только при нажатии на эту кнопку, но и при нажатии клавиши Enter сразу после ввода текста.
Для анализа текста напишем общую процедуру Text_Analysis, а в событийных процедурах запишем только команды вызова процедуры Text_Analysis. Процедура Text_Analysis анализирует введенный текст и при обнаружении пробела выводит найденное слово в элемент Out_Lab – поле вывода сообщений.
Private sub Text_Analysis() a = Trim(Inp_Box) & " " 'удаление ведущих и концевых пробелов; 'для удобства добавить пробел в конце строки n = Len(a) i = 1 Do j = InStr(i, a, " ") 'поиск пробела в строке Out_Lab = Out_Lab & Mid(a, i, j – i) & vbLf If j = n Then 'достигнут конец строки Exit Sub Else i = j + 1 End If Loop End Sub
Private Sub Go_Click() Text_Analysis End Sub |
Сообщение формируется из выделенных слов, которые располагаются на разных строках. Константа vbLf используется для перехода на новую строку в сообщении. Элемент формы Inp_Box можно рассматривать как глобальную переменную: он принимает значение при вводе данных и его значение доступно во время выполнения формы всем процедурам процедурного листа формы. |
Запустите форму. После ввода строки текста "Формы в VBA – это объекты организации интерфейса пользователя" нажмите кнопку Разбить на слова.
Рис. 7.10. Результат разбивки текста на слова
Если пользователь после ввода строки нажмет клавишу Enter, это означает его намерение закончить ввод строки и разбить введенную строку на слова. Предусмотрим процедуру обработки события KeyDown (нажатие на клавишу).
На процедурном листе формы выберите Inp_Box из списка объектов и событие KeyDown. Автоматически появится процедура нажатия на клавишу – процедура с параметром Keycode, который передает процедуре код нажатой клавиши. Значение этого параметра проверяется с использованием констант VBA: нажатию на клавишу Enter соответствует константа vbKeyReturn.
Private Sub Inp_Box_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = vbKeyReturn Then Text_Analysis EndIf End Sub
|
В процедуру включен оператор If, который анализирует нажатую клавишу, и если нажата Enter, то разбивает на слова введенную строку, вызывая процедуру Text_Analysis. |
Добавьте оставшиеся две кнопки с именами Ex и Sel_Sheet(см. таблицу выше). Нажатие на первую завершает работу с формой, нажатие на вторую вызывает вторую форму – форму для выбора рабочего листа и сохранения на нем выделенных из введенного текста слов. Установите свойства кнопок в соответствии с таблицей.
Для выравнивания добавленных кнопок по отношению к ранее созданной кнопке, а также для установки одинаковой высоты или ширины кнопок используйте команды Align и Make Same Size меню Format.
Событийная процедура нажатия на кнопку Ex выгружает форму Str_An и завершает пользовательское приложение.
Private Sub ex_Click() Unload Me End Sub
Private Sub Sel_Sheet () MsgBox "Sel_Sheet" End Sub
|
Оператор Unload выгружает объект, освобождая занятую им оперативную память. Объект Me – это активная форма. |
Событийная процедура нажатия на кнопку Sel_Sheet временно содержит единственный оператор, который высвечивает название нажатой кнопки.
Рекомендуется
при разработке приложений записывать подобного рода процедуры-заглушки с тем, чтобы проверить работу сконструированных форм до завершения отладки событийных процедур (один из принципов проектирования сверху вниз).
Впоследствии по окончании разработки соответствующей событийной процедуры оператор MsgBox может быть закомментирован или удален.
Теперь процедурный лист формы Str_An содержит три событийные процедуры и общую процедуру Text_Analysis. Окно объектов (левое верхнее поле) содержит список всех объектов формы.
Рис. 7.11. Список объектов формы