- •Н.Г.Куфтинова программирование в среде vba
- •Н.Г.Куфтинова программирование в среде vba
- •Оглавление
- •Введение
- •Разработка алгоритма. Блок-схема. Структуры алгоритмов
- •Понятие алгоритма. Структуры алгоритмов
- •3. Базовая структура цикл.
- •Контрольные вопросы
- •Представление данных в памяти,типы данных, идентификаторы, переменные, массивы
- •Программный способ записи алгоритмов
- •Представление данных в памяти
- •Типы данных
- •Идентификаторы, переменные, массивы
- •Операции, выражения, операторы
- •Контрольные вопросы
- •Структура программ на vba, операторы описания, присваивания
- •Структура программ на vba
- •Операторы описания
- •Oператоры присваивания
- •Контрольные вопросы
- •Понятие макроса, создание, отладка программы
- •Понятие макроса. Создание макроса
- •4.2. Отладка, использование среды для отладки программ
- •Средства отладки
- •Обработка ошибок выполнения
- •Перехват ошибок
- •4.6. Общие сведения о перехвате ошибок
- •Контрольные вопросы
- •Управляющие структуры vba
- •Конструкция If . . . Then
- •Конструкция If . . . Then . . . Else
- •Конструкция Select Case
- •Контрольные вопросы
- •Операторы цикла. Вложенные циклы
- •Операторы цикла
- •Вложенные циклы
- •Контрольные вопросы
- •Символьные данные. Операции и функции для работы с символьными данными
- •Символьные данные
- •Операции и функции для работы с символьным данными
- •Булевские вектора и операции для работы с ними
- •Контрольные вопросы
- •Подпрограмма-процедура
- •Общие процедуры
- •Создание новых процедур
- •Просмотр существующих процедур
- •9.4. Вызов процедур Sub
- •Процедуры в стандартных модулях
- •Подпрограмма-функция
- •10.1 Вызов процедур Function
- •10.2. Механизмы передачи параметров. Типы данных параметров. Передача параметров по значению
- •10.3. Передача параметров по ссылке
- •10.4. Неизвестное число параметров
- •10.5. Рекурсия
- •Контрольные вопросы
- •Использование объектов, их свойства и методы. Формы
- •Работа с объектами
- •Происхождение объектов. Основы работы с объектами
- •Установка значений свойств
- •Получение значений свойств
- •Использование методов в коде
- •Взаимосвязь объектов
- •Применение свойств и методов к членам наборов
- •Общие наборы в vba
- •Разработка формы. События и методы формы
- •Связь между объектами. Создание объектов. Использование и объявление переменных для объектов
- •Формы как объекты. Объект fso
- •Контрольные вопросы
- •12. Элементы управления в приложениях vba
- •12.1. Кнопки управления
- •12.2. Метки
- •12.3. Текстовые поля
- •12.4. Работа с текстом в текстовом поле
- •12.5. Флажки
- •12.6. Создание групп переключателей. Выбор переключателей
- •12.7. Комбинированные окна и списки
- •12.8. Полосы прокрутки как устройства ввода
- •12.9. Графическое окно в качестве контейнера
- •12.10. Элемент управления Image
- •12.11. Другие элементы управления
- •Контрольные вопросы
- •Литература
- •Приложение 1
- •2. Математические функции
- •4. Операторы циклов
- •Часть1. Обработка одномерного массива
- •Часть 2. Обработка двумерного массива
- •Приложение 2
Идентификаторы, переменные, массивы
Суть объектно-ориентированного программирования заключается в объединении данных и подпрограмм для работы с этими данными в единый объект, называемый классом. При такой концепции изменяется подход к программированию, поскольку появляется независимость данных от программ для их обработки [4,7,9,13].
В объектно-ориентированном программировании для выполнения какого-либо действия программист вызывает подпрограмму обработки (т.е. выдает команду), а поскольку данные, необходимые для обработки, уже связаны с подпрограммой, то требуется передача в подпрограмму данных, связанных только с реализацией команды.
Например, пусть имеется команда: "сдвинуть окно на 5 позиций вправо". В этой команде задано:
а) что делать;
б) направление перемещения;
в) расстояние перемещения.
Как это делается, это не столь уже и важно, хотя один раз приходится заняться детализацией осуществления команды (но и здесь возможно упрощение работы). Реализация этого основного принципа выдачи команд (указывается команда и параметры, необходимые для ее реализации, а вся остальная информация уже сохраняется в объекте) исключает тщательное отслеживание структур данных, но требует разграничение доступа к данным и подпрограммам.
Для описания объектов вводится понятие класса. Класс группирует и содержит как данные, описывающие объект, так и подпрограммы, необходимые для обработки этих данных. Поскольку объектов может быть сколь угодно много, каждый класс описывает новый тип данных. Поэтому имя класса является именем типа данных.
Класс, описывающий какой-либо объект, обычно содержит данные являющиеся характерными для объекта. Изменение таких данных возможно только с помощью подпрограмм либо входящих в состав класса, либо имеющих к ним доступ. Такие данные объявляются закрытыми
В объектно-ориентированном программировании приняты следующие термины;
подпрограммы, входящие в класс называются методами;
выдача команды называется сообщением;
выбранная команда часто является свойством;
параметры конкретизируют свойство.
С целью повторного использования уже созданных классов, то есть для накопления и усложнения разработанный программ, другими словами для использования в новых разработках уже имеющихся приложений, используется наследование [7,8].
Имена (идентификаторы) - употребляются для обозначения объектов программы (переменных, массивов, процедур и дp.). В VBA имена констант, переменных и процедур должны удовлетворять следующим требованиям:
должны начинаться с буквы;
не могут содержать точки и символов объявления типа;
не могут быть длиннее 255 символов. Длина имен объектов не должна превышать 40 символов.
не могут быть ключевыми словами (именами операций, операторов, встроенных функций).
Переменные представляют собой зарезервированное место в памяти ПК для хранения значения. Переменные обозначаются именами - словами, используемыми для ссылки на значение, которое содержит переменная, и характеризуются типом, определяющим вид данных, которые можно хранить в переменной. Переменные могут изменять свои значения в ходе выполнения программы. По умолчанию переменные имеют тип данных Variant, если в модуле отсутствует инструкция DefТип. Для явного указания типа переменной можно в конце ее имени указать символ описания типа:
Currency - @;
Double - #;
Integer - %;
Long - &;
Single - !;
String - $.
или объявления переменных. Объявить переменную - значит заранее сообщить программе о ее существовании. Объявление переменной производится специальным оператором. Одновременно с объявлением переменной после ее имени можно записать ключевое слово As, после которого задается тип переменной.
Константы - имена, идентифицирующие некоторые неизменяемые числовые значения или строки текста. В отличие от переменных их нельзя изменить или назначить им новые значения. В VBA различают внутренние или системные константы, которые имеют префикс vb, например vbOK, и символические или определяемые пользователем с помощью ключевого слова Const константы. Имена констант имеют те же ограничения, что и имена переменных, тип данных, хранящихся в константе, задается так же, как для переменных.
Массивы - последовательности логически связанных элементов одного типа, которым присвоено одно имя. Положение элемента в массиве однозначно определяется его индексами (одним, в случае одномерного массива, или несколькими, если массив многомерный). Имена массивов имеют те же ограничения, что и имена переменных, тип данных, хранящихся в массиве, задается так же, как для переменных. Однако если массив имеет тип Variant, его отдельные элементы могут содержать данные разных типов.
Другое определение массива - это объекты программы, которые позволяют хранить однотипные значения под определенным именем.
Доступ к элементам массива осуществляется по их номеру – индексу. Если для доступа к элементу массива нужен один индекс, то массив одномерный, если два индекса, то массив двухмерный (матрица).
В VBA существуют два вида массивов: массив фиксированного размера и динамический массив, размер которого может изменяться во время выполнения программы с помощью специальных операторов [14,15].
Одномерные массивы задаются в следующем виде:
Dim имяМассива (1 То n) As T, где T – тип элементов.
Матрицы задаются в виде:
Dim имяМассива (1 То n, 1 To m) As T, где n – число строк, а m – число столбцов
При необходимости генерации случайных чисел используются функции:
Randomize – активизация генератора случайных чисел;
Rnd – получение случайного вещественного числа нормально распределенного в диапазоне от 0 до 1.
При объявлении массива фиксированной длины за его именем в круглых скобках задаются через запятую верхние границы каждой размерности, не превышающие максимального значения типа Long. По умолчанию нижняя граница равна 0, но ее можно задать явно с помощью ключевого слова To:
Lines (100 To 120) As String
При объявлении динамического массива список его размерностей оставляют пустым, а затем с помощью специального оператора назначают действительное число размерностей и элементов массива.
В VBA массивы любых типов данных требуют 20 байт памяти плюс 4 байта на каждую размерность массива плюс число байт, требуемых для хранения данных. Объем памяти, требуемый для сохранения данных, рассчитывается как произведение числа элементов на размер элемента. Например, данные в одномерном массиве, который содержит четыре элемента типа Integer, требующих по 2 байта на элемент, занимают 8 байт. Вместе с 20 байтами на массив и 4 байтами на размерность общий требуемый объем составляет 32 байта.
Значение типа Variant, содержащее массив, требует 12 байт в дополнение к объему, занимаемому требуемым массивом.
Структуры - в VBA нет понятия структуры, но есть определяемый пользователем с помощью инструкции Type тип данных. Типы данных, определяемые пользователем, могут содержать один или несколько элементов любого типа данных, массивы или ранее определенные пользователем типы.
Например:
Type MyType
MyName As String ' Имя записывается в строковую переменную.
MyBirthDate As Date ' День рождения записывается в переменную даты.
MySex As Integer ' Пол записывается в целую переменную
End Type ' (0 для женщины, 1 для мужчины).
Рассмотрим примеры по работе с массивами чисел (применение оператора цикла рассматривается в главе 6).
Пример 1. Заполнить массив случайными числами, вычислить их сумму (рис. 11.).
Рис. 11. Результат программы примера 1.
Пример 2. Заполнение матрицы случайными числами + Объект Cells (рис. 12.).
Range - объект для работы с данными в ячейках рабочего листа.
Cells - объект доступа к диапазону ячеек по индексам.
Рис. 12. Результат программы примера 2.
Пример 3. Заполнение матрицы случайными числами + Функция Rnd+Объект Cells.
Рис. 13. Результат программы примера 3.
Пример 4. Заполнение двух матриц случайными числами, получение третьей матрицы, элементы которой являются суммами двух предыдущих (рис. 14.).
Рис. 14. . Результат программы примера 4.