
- •Программирование в 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.1.5. Закрытые и открытые процедуры
Открытую процедуру, объявленную с применением ключевого слова Public, разрешается вызывать из любой процедуры любого модуля приложения. Закрытую процедуру, объявленную с помощью ключевого слова Private, можно вызывать только из процедур, содержащихся в том же (что и закрытая процедура) модуле. Процедуры Sub и Function могут быть либо закрытыми, либо открытыми. Следующие процедуры закрытые:
Private Sub Test1() MsgBox "This is the Test1 procedure running" End Sub
Private Function AddThree(OriginalValue As Long) AddThree = OriginalValue + 3 End Function
А эти — открытые:
Public Sub Test1() MsgBox "This is the Test1 procedure running" End Sub
Public Function AddThree(OriginalValue As Long) AddThree = OriginalValue + 3 End Function
Если в объявлении процедуры не указано ни Private, ни Public, то по умолчанию она считается открытой. Хотя для создания открытой процедуры использовать ключевое слово Public не обязательно, включение его в объявление процедуры упрощает понимание того, какие процедуры открытые, а какие закрытые.
1.1.6. Использование значения, возвращаемого функцией
Чтобы функция возвращала значение, в ней должен быть оператор, который присваивает это значение имени функции. В следующем примере значение, присваиваемое ConeSurface, и будет значением, возвращаемым функцией:
Function ConeSurface(radius, height) Const Pi = 3.14159 coneBase = Pi * radius ^ 2 coneCirc = 2* Pi* radius coneSide = Sqr(radius ^ 2 + height ^ 2) * coneCirc / 2 ConeSurface = coneBase + codeSide End Function
Данные, необходимые процедуре типа Sub или Function для выполнения ее задачи (в предыдущем примере —radius и height), передаются как аргументы. Значение, возвращаемое процедурой типа Function, можно сделать частью более сложного выражения. Приведенный ниже оператор (из какой-то другой процедуры) использует значения, возвращаемые функциями ConeSurface и ScoopSurface:
totalSurface = ConeSurface(3. 11)+2* ScoopSurface(3)
1.1.7. Выполнение процедуры Sub
Вы можете сделать так, чтобы процедура Sub выполнялась при определенном событии, запустить ее из Visual Basic Editor, из окна Вашего приложения или вызвать из другой процедуры.
Чтобы процедура Sub автоматически выполнялась всякий раз, когда возникает определенное событие, добавьте ее вызов к процедуре обработки этого события.
Чтобы запустить процедуру Sub из Visual Basic Editor, установите курсор ввода в любой участок процедуры и либо нажмите клавишу F5, либо щелкните кнопку RunSub/UserForm (Запуск_подпрограммы/UserForm) на панели инструментов Standard (Стандарт) или Debug (Отладка).
Чтобы запустить процедуру Sub, которая является макросом, выберите ее имя в диалоговом окне Macros (Макрос) приложения и щелкните кнопку Run (Выполнить).
Чтобы вызвать процедуру Sub из другой процедуры, используйте ее имя по аналогии со встроенными ключевыми словами. Вот пример процедуры, вызывающей процедуру DisplayWelconne:
Sub TestCall() DisplayWelcome End Sub
Процедуру, объявленную закрытой, нельзя вызывать из процедур за пределами модуля, в котором она находится. В то же время открытую процедуру можно вызывать извне ее модуля.
Когда Вы вызываете процедуру, расположенную не в текущем модуле, Visual Basic просматривает другие модули и выполняет первую найденную открытую процедуру с указанным именем. Если имя открытой процедуры не уникально, лучше явно задать модуль, в котором она находится. В следующем примере вызывается процедура Sub с именем “DisplayWelcome” из модуля “TestTools”:
TestTools.DisplayWelcome
При необходимости можно указать и проект, в котором находится процедура. Вот пример вызова процедуры Sub с именем “DisplayWelcome” из модуля “TestTools”, относящегося к проекту “TestDocument”:
TestDocument.TestTools.DisplayWelcome
Здесь Вы указываете кодовое имя проекта, а не имя документа, с которым связан этот проект. Выяснить кодовое имя (и изменить его) можно в поле, расположенном справа от строки (Name) в окне свойств для данного проекта. Чтобы вывести на экран это окно, выделите подсветкой нужный проект в окне проекта и выберите из меню View (Вид) команду Properties Window (Окно свойств). Кодовое имя проекта можно изменить и по-другому — ввести новое имя в поле Project Name (Имя проекта) на вкладке General (Общие) диалогового окна Project Properties (Свойства проекта). Чтобы открыть это диалоговое окно, щелкните правой кнопкой мыши нужный проект в окне проекта и выберите из контекстного меню команду Properties (Свойства...) (название этой команды дополняется именем проекта). Справку о параметрах, устанавливаемых в диалоговом окне Project Properties (Свойства проекта), Вы получите, нажав клавишу F1.
Если Вы хотите, чтобы процедуру можно было вызывать из других модулей проекта, но не из других проектов, объявите ее открытой, а модуль, в котором она находится, — закрытым. Для этого добавьте в раздел (Declarations) [(Описания)] данного модуля оператор Option Private Module.
Чтобы процедуры одного проекта можно было вызывать из другого проекта, в последнем должна быть ссылка на проект, содержащий вызываемый код. Создаются такие ссылки с помощью диалогового окна References (Ссылки), которое открывается через меню Tools (Сервис).