- •Содержание
- •Раздел 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. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Оператор присваивания
Процесс установки значения переменной называется присвоением. Оператор присваивания составляет основу всех вычислений. Он состоит из переменной слева, знака равенства и выражения (формулы) справа. Выражение содержит знаки операций и операнды. В качестве операндов могут использоваться переменные, функции и константы. Например, A = B + C * D – 34.5 / ln(B).
Оператор присваивания вычисляет значение выражения справа и назначает его переменной слева, при этом прежнее значение этой переменной заменяется на новое. Следует отличать оператор присваивания от операции сравнения двух операндов. В первом случае производится изменение значения переменной, указанной слева, а во втором – значения операндов сравниваются.
Внимание
В операторе присваивания один и тот же идентификатор переменной может стоять слева и справа. Например, запись x=x+2 с математической точки зрения недопустима, а в качестве оператора присваивания означает, что значение переменной x увеличивается на два.
Оператор присваивания применяется для вычислений с любыми типами данных. В операторе присваивания могут использоваться свойства объектов, например, оператор ActiveCell.Value=222 занесет в активную ячейку значение 222.
В выражении справа можно смешивать различные типы данных. Необязательно типы переменной слева и результата выражения справа должны совпадать. При несовпадении типов выражение преобразуется к типу переменной слева. Если эта попытка не удается, то возникает ошибка несоответсвия типов – Type mismatch. Рекомендуется контролировать соответствие типов левой и правой частей оператора присваивания.
Операторы присваивания можно записывать в окне Immediate. Например, R=13.5.
Другая форма записи оператора присваивания – это использование оператора Let. Например, Let R=13.5. Обычно ключевое слово Let опускается.
Выполнение операций
В приводимых далее примерах используется оператор цикла For…Next, который позволяет выполнить операции несколько раз в зависимости от некоторого условия. Ключевые слова For и Next суть начало и конец цикла.
Пример
Распечатать в окне Immediate первые десять целых чисел.
Sub pr_i() Dim i As Integer ‘целая переменной For i=1 To 10 'начало цикла Debug.Print i ’распечатка значения Next I ’конец цикла End Sub
|
Переменная i (счетчик цикла) в процессе выполнения цикла меняет значение от 1 (устанавливается выражением i=1) до значения 10, заданного выражением To 10. Шаг изменения значений переменной i по умолчанию 1. |
Можно было бы записать все операторы на одной строке, используя двоеточие как разделитель между операторами For i=1 To 10: Debug.Print i : Next i.
Подробно операторы цикла рассмотрены в Разделе 4. Операторы управления.
Арифметические операции
При выполнении арифметических операций можно смешивать различные типы данных. При этом автоматически производится преобразование целых чисел в более общий формат действительных чисел. Переменные всех числовых типов могут присваиваться друг другу. При присвоении целой переменной значения переменной с фиксированной или плавающей точкой оно округляется до целого.
Если заранее известно, что переменная будет принимать только целые значения, ей следует назначать тип Integer или Long. Если будут использоваться дробные числа, то переменная может иметь тип Currency, Single или Double.
Внимание
Если необходима высокая точность вычислений или нельзя заранее определить, какие значения будут у переменной, используйте тип Double.
Операция деления на нуль порождает ситуацию ошибки Division by zero и приводит к немедленному завершению программы.
Примеры
Подсчитать сумму чисел от 1 до 1000.
Sub sum_int()
Dim n As Integer, s As Long
s=0 'инициализация значения суммы
For n=1 To 1000‘начало цикла
s=s+n ‘добавить к сумме очередное 'значение
Next n ‘конец цикла
Debug.Print s ’распечатка результата 'суммирования
End Sub
В процедуре используются два оператора присваивания: s=0, s=s+n. Первый оператор устанавливает начальное значение для суммы чисел, а второй наращивает эту сумму в процессе вычислений.
Подсчитать суммы n! и 1/n! для n от 1 до 100.
Sub sum_nf()
Dim n As Integer, s As Double , f As Double, g As Single
s = 0 'инициализация значения суммы
f = 1 'инициализация значения факториала
For n = 1 To 100‘начало цикла
f = f * n ’расчет факториала
s = s + f ‘добавить к сумме значение факториала
g=g+1/f ‘добавить к сумме обратное значение факториала
Next n ‘конец цикла
Debug.Print s, g ’распечатка результата суммирования
End Sub
Переменные s и f объявлены как Double, т.к. значение факториала достаточно большая величина.
Переменная g не является целым числом и из-за своей небольшой величины может быть объявлена как Single.
Рассчитать сумму налога на физическое лицо, если его доход в течение месяца составил 10 тысяч 147 рублей, а налог составляет 13%.
Sub nalog()
Dim s As Currency
Dim nlg As Currency ‘объявление переменных
s = 10147
nlg = s * 0.13 ‘расчет налога
Debug.Print nlg ’распечатка результата
End Sub
Переменные процедуры принимают денежные значений. Разделителем целой и дробной части в используемой константе 13% является точка.
Операции деления нацело "\" и получения остатка от деления Mod запишите в окне Immediate (для перехода в окно нажмите Ctrl+G). Оператор ? 10 \ 3 возвращает три.
При делении нацело оба числа преобразуются в целые путем округления, затем выполняется операция деления и у результата операции отбрасывается дробная часть.
Операция получения остатка от деления Mod дополняет операцию деления нацело возвращением остатка. Оператор ? 10 MOD 3 возвращает значение 1.
Какой день недели будет через сто дней, если сегодня понедельник?
Оператор ?1+100 MOD 7 возвращает значение 3, что соответствует среде.
Какая дата будет через 100 дней, если сегодня 14 января 2001 года?
Public Sub add_date() Dim a As Date a = #1/14/2001# Debug.Print a + 100 'результат '24.04.2001 End Sub |
Дату как константу задают, используя знак "#" слева и справа от даты. В качестве разделителя даты всегда используется слэш (/), а в качестве разделителя времени - двоеточие (:). |
Установка даты в виде a=#14 January 2001# или a = #14/1/2001# автоматически преобразует дату в #1/14/2001#.