
- •Программирование в excel
- •Симферополь 2000
- •Факультет "Механизация сельского хозяйства" Программирование в excel
- •1. Основы программирования на vba
- •1.1. Создание, редактирование и запись программ
- •1.1.1. Запись макроса
- •1.1.2. Как найти макрос в проекте
- •1.1.3. Написание новой процедуры
- •Чем макрос отличается от процедуры
- •1.1.4. Процедуры типа Sub и Function
- •1.1.5. Закрытые и открытые процедуры
- •1.1.6. Использование значения, возвращаемого функцией
- •1.1.7. Выполнение процедуры Sub
- •1.1.8. Передача аргументов в процедуру
- •1.1.9. Именованные аргументы
- •1.1.10. Написание процедур для обработки событий
- •1.1.11. Где хранится код обработки события
- •1.1.12. Средства, ускоряющие написание программ
- •1.1.13. Как написать легкочитаемую программу
- •1.2. Переменные, константы и типы данных
- •1.2.1. Типы данных в Visual Basic
- •1.2.2. Объявление константы, переменной или массива
- •1.2.3. Объявление объектной переменной
- •1.2.4. Встроенные константы
- •1.3. Управляющие конструкции
- •1.3.1. Операторы ветвления
- •1.3.2. Операторы циклов
- •1.3.3. Вложение управляющих конструкций
- •1.3.4. Выход из циклов и процедур
- •1.4. Структура программы
- •2. Сортировка данных
- •2.1. Алгоритм сортировки обменами (алгоритм “пузырька”)
- •2.2. Алгоритм сортировки вставками
- •2.3. Алгоритм сортировки выбором элемента
- •2.4. Алгоритм быстрой сортировки (метод Хоора)
- •2.5. Алгоритм пирамиды (метод Уильямса-Флойда)
- •2.6. Учебные задачи по программированию сортировки данных
- •3. Работа vba с объектами Excel
- •3.1. Как получить справку по Visual Basic для Microsoft Excel
- •3.2. Объекты Microsoft Excel
- •3.3. Работа с объектом Application
- •3.4. Работа с объектом Workbook
- •3.4.1. Открытие рабочей книги
- •3.4.2. Закрытие рабочей книги
- •3.4.3. Создание и сохранение рабочей книги
- •3.5. Работа с объектом Range
- •3.6. Строковые ссылки в стиле а1 или имена диапазонов
- •3.6.1. Числовые индексы строк и колонок
- •3.6.2. Свойство Offset
- •3.6.3. Свойства CurrentRegion и UsedRange
- •3.6.4. Организация циклов для перебора ячеек диапазона
- •3.6.5. Применение свойства Address для отладки кода, работающего с объектом Range
- •3.7. Работа с событиями
- •3.7.1. Включение и отключение обработки событий
- •3.7.2. Использование событий, связанных с рабочими листами
- •3.7.3. События на уровне рабочего листа
- •3.7.4. События на уровне диаграммы
- •3.7.5. События на уровне рабочей книги
- •3.7.6. События на уровне приложения
- •3.7.7. Модули классов и события
- •4. Численные методы математики
- •4.1. Методы решения нелинейных уравнений
- •4.1.2. Метод деления отрезка пополам (метод дихотомии).
- •4.1.3. Метод Ньютона (касательных).
- •4.1.4. Метод хорд (секущих).
- •4.1.5. Метод итераций (метод последовательных приближений).
- •4.2.1. Теоретические сведения
- •4.2.2. Метод Крамера
- •4.2.3. Метод Гаусса
- •4.2.6. Метод Зейделя
- •4.3. Обработка экспериментальных данных
- •4.3.1. Задачи, которые возникают при обработке экспериментальных данных.
- •4.3.2. Интерполяция
- •4.3.2.1. Интерполяция функций
- •4.3.3.2. Определение параметров эмпирической формулы
- •4.4. Методы численного интегрирования
- •4.4.1. Метод трапеций
- •4.4.2. Метод Симпсона
- •4.4.3. Оценка точности формул численного интегрирования. Выбор шага интегриров-ания
- •4.4.3.1. Выбор шага интегрирования по оценке остаточного члена (ошибки)
- •4.4.3.2. Выбор шага интегрирования с помощью двойного пересчета
- •4.5.1. Теоретические сведения
- •4.5.2. Одноступенчатые методы
- •4.5.2.1. Решение с помощью рядов Тейлора
- •4.5.2.2 Метод Эйлера
- •4.5.2.3. Модифицированный метод Эйлера
- •4.5.2.4. Метод Эйлера-Коши
- •4.5.2.5 Метод Рунге-Кутта
- •4.5.3. Многоступенчатые методы
- •4.5.3.1. Методы прогноза и коррекции
- •4.6. Методы решения линейной краевой задачи для обыкновенных дифференциальных уравнений
- •4.6.1. Постановка задачи
- •4.6.2. Метод конечных разностей
- •4.6.3. Метод прогонки
- •4.6.4. Алгоритм решения краевой задачи методом прогонки.
1.2.3. Объявление объектной переменной
Вы объявляете объектную переменную, указывая либо универсальный тип Object, либо конкретное имя класса. Следующий оператор объявляет объектную переменную типа Object:
Dim mySheet As Object
Если тип переменной задан как Object, Visual Basic не знает, с объектами какого типа Вы будете использовать ее в дальнейшем. Поэтому Visual Basic при компиляции не сможет проверить, существует ли такой объект, корректно ли применяются его методы и свойства, и не сумеет связать эту информацию с объектной переменной — иначе говоря, Visual Basic не выполнит раннее связывание (early binding) объектной переменной. Лишь когда Вы запустите программу, и этой переменной будет присвоена ссылка на конкретный объект, Visual Basic получит нужную информацию и выполнит позднее связывание (late binding). Универсальные объектные переменные полезны только в том случае, когда Вам заранее не известен конкретный тип объекта или когда за переменной периодически закрепляются объекты разных классов. Так что по возможности указывайте при объявлении объектной переменной имя конкретного класса, например, так:
Dim mySheet As Worksheet Dim myPres As Presentation Dim myRange As Range Dim myApp As Application
Тип объектной переменной (в дополнение к конкретному имени класса) можно квалифицировать именем приложения, которое предоставляет данный объект (см. пример ниже). Это полезно в программе, использующей объекты из нескольких библиотек (особенно если в них содержатся объекты с одинаковыми именами).
Dim wndXL As Excel.Window Dim wndWD As Word.Window Dim appWD As Word.Application
Для закрепления объекта за переменной предназначен оператор Set:
Dim myRange As Excel. Range Set myRange = Worksheets("Sheet1").Range("A1")
Если Вы не объявили объектную переменную явно и в момент присвоения забыли указать ключевое слово Set, Visual Basic не закрепит объект за этой переменной, а присвоит ей значение свойства объекта по умолчанию. В следующем примере переменная myRange получает значение свойства по умолчанию объекта Range (каковым является свойство Value):
myRange = Worksheets("Sheet1").Range("A1") ' пропущен оператор Set!
1.2.4. Встроенные константы
Библиотека объектов каждого приложения Office 97 предоставляет набор встроенных констант, которые можно использовать для задания значений свойств или передачи аргументов свойствам и методам. Набор встроенных констант, отражающих допустимые значения какого-либо свойства или параметра, передаваемого методу или свойству, представляется перечислимым типом. Для многих свойств и методов в качестве типа возвращаемого значения или параметра Вы увидите в Object Browser (средство просмотра объектов) именно перечислимый, а не базовый тип данных. Чтобы открыть в Visual Basic Editor окно Object Browser (Просмотр объектов), нажмите клавишу F2. С его помощью можно просмотреть, какие константы составляют перечислимый тип, и каковы их значения. Например, в списке Classes (Классы) щелкните строку Application, а в списке Members Of (Компонент) — строку Display Alerts. В нижней части окна Object Browser (Просмотр объектов) Вы увидите следующий текст:
Property DisplayAlerts As WdAlertLevel
WdAlertLevel — перечислимый тип, объединяющий константы, которые представляют все допустимые значения свойства DisplayAlerts. Перечислимый тип нетрудно узнать по имени, поскольку оно всегда начинается с префикса, обозначающего библиотеку объектов, в которой определен этот тип, — например: Mso, Wd, Xl, Ac, Pp, VB или Fm. (Имена встроенных констант начинаются с тех же префиксов, что и имена перечислимых типов.) Чтобы просмотреть константы перечислимого типа, щелкните подчеркнутую строку WdAlertLevel. После этого WdAlertLevel станет текущим в списке классов Object Browser, и константы этого типа появятся в списке Members Of (Компонент). Если щелкнуть одну из констант, в нижней части окна Object Browser (Просмотр объектов) будет показано значение, которое представляет данная константа. Подробнее об использовании диалогового окна Object Browser см. главу 2 “Введение в модели объектов”.
Встроенные константы используются в программах вместо литеральных значений. Следующие две строки кода, каждая из которых устанавливает в Word режим показа всех предупреждений и сообщений при выполнении процедуры, эквивалентны:
Application.DisplayAlerts = -1 Application.DisplayAlerts = wdAlertsAII
Константы легче читать, чем литеральные значения. Кроме того, если эти значения в будущих версиях приложений изменятся, Вам вряд ли придется модифицировать программу, использующую константы. Вполне вероятно, что литеральное значение -1 больше не будет соответствовать параметру, заставляющему выводить все предупреждения и сообщения, но константа wdAlertsAll — будет обязательно.