- •Содержание
- •Раздел 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. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Цикл While…Wend
Этот способ организации цикла повторяет команды, пока заданное условие верно. Он полностью эквивалентен циклу Do…Loop с условием While в первой строке оператора.
Синтаксис оператора
While condition
statements
Wend
condition – тестируемое выражение со значением True или False;
statements – последовательность операторов, выполняемых в цикле.
Внимание
При таком способе организации цикла не применяется оператор немедленного завершения цикла.
Приведем процедуру расчета зарплаты с использованием этого оператора цикла
Sub salary_while_wend() Dim h As Long, r As Long, s As Double, Dim Fund As Long, id As Integer h = 1 r = 1 While h > 0 And r > 0 id=Val(InputBox("Код сотрудника")) h = Val(InputBox("Количество отработанных часов")) r = Val(InputBox("Почасовая оплата")) If h > 0 And r > 0 Then s = h * r Fund = s * 0.13 s = s – Fund MsgBox "Код сотрудника " & id & ", сумма на руки " & s End If Wend End Sub |
Выполняется проверка введенных значений h и r, если оба не равны нулю, то проводится расчет и запрос на ввод данных о следующем сотруднике. В противном случае цикл завершается.
|
Раздел 5.Процедуры, подпрограммы и функции
Программа для решения некоторой задачи может иметь сложную структуру и быть как угодно велика, т.е. состоять из большого числа операторов.
Если программа имеет в своем составе блоки, которые предполагают автономную обработку данных, или же в программе неоднократно повторяются некоторые последовательности операторов, рекомендуется разбить программу на ряд процедур, каждая из которых возьмет на себя часть реализации общего алгоритма решения задачи. Процедуры представляют собой логические сегменты программы.
Преимущества
При использовании процедур отпадает необходимость дублировать участки программы.
Вызывая несколько раз процедуру, программа выполняет несколько раз одни и те же действия, записанные один раз.
Программы, разбитые на процедуры, легче читаются и легче модифицируются. Легко можно локализовать часть программы, в которой произошла ошибка.
Процедура может располагаться на любом процедурном листе, в любом модуле или открытом проекте и может вызываться из любой процедуры.
Процедура состоит из некоторого количества операторов, объединенных в группу для решения некоторой задачи, т.е. это последовательность операторов языка, к которым возможно обращение как к связанной группе операторов. Невозможно выполнить часть процедуры – можно выполнить процедуру только целиком.
Важно
Все исполняемые операторы модуля размещаются в процедурах.
Вне процедур в начале модуля могут находиться только опции (например, Option Explicit), объявления модульных, глобальных переменных и переменных пользовательского типа.
Классификация процедур
Процедуры, разрабатываемые вручную, обычно оперируют различными данными: вычисляют значения переменных, отображают данные.
Процедуры, записываемые макрорекордером, содержат команды MS Excel и фактически расширяют возможности приложения для выполнения действий с электронными таблицами. Их называют командными процедурами, макропроцедурами или макросами1. Далее термины "макрос" и "процедура" используются как синонимы.
Часто используют макрорекордер, чтобы создать основу будущей процедуры, например, записать операторы построения и форматирования диаграммы или операторы обработки объекта, которые позже можно включить внутрь цикла. Затем добавляют операторы языка VB для придания процедуре законченного вида. И наоборот, написав процедуру вручную, вставляют в нее операторы обработки объектов офисного приложения, записываемые макрорекордером.
Обычно в составе проекта присутствуют
основная процедура, которая вызывает другие процедуры. Это самостоятельно используемая процедура;
вызываемые процедуры, реализующие конкретные задачи проекта;
процедуры обработки событий.
В качестве вызываемых процедур используются подпрограммы и функции: процедуры-функции возвращают некоторое значение в отличие от подпрограмм, которые значений не возвращают.
Замечание
Под понятием "функция возвращает значение" подразумевается, что в процессе выполнения процедуре-функции присваивается некоторое значение, которое доступно вызвавшей ее процедуре.
Чтобы отличать процедуры-функции от остальных процедур, для последних будем использовать термин "процедуры общего типа". Для краткости вместо термина "процедура-функция" будем использовать термин "функция".
Процедуры обработки событий (событийные процедуры) связаны с конкретными событиями. Событие, например, это нажатие командной кнопки в диалоге, закрытие или активизация окна таблицы. Если установлена связь процедуры с событием объекта приложения, то процедура является событийной. Особенность событийных процедур в том, что они запускаются автоматически, если происходит некоторое событие.
Удобно
написать автоматически запускаемые процедуры со специальными именами, например: Auto_Open – автопоцедура, выполняемая при открытии документа.
Далее под термином "процедура" будем подразумевать любую процедуру – вызывающую, вызываемую, процедуру-функцию или событийную процедуру, если специально не оговорено другое.