- •Программирование в 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. Алгоритм решения краевой задачи методом прогонки.
3.4.2. Закрытие рабочей книги
Для закрытия книги предназначен метод Close объекта Workbook. В следующем примере книга закрывается без сохранения последних изменений:
Sub OpenChangeClose() Dо fName = Application.GetOpenFilename Loop Until fName <> False Set myBook = WorkBooks.Open(Filename:=fName) ' здесь вносим какие-то изменения в myBook myBook.Close savechanges:=False End Sub
3.4.3. Создание и сохранение рабочей книги
Создать книгу позволяет метод Add набора Workbooks. Значение, возвращенное этим методом, присвойте объектной переменной, и тогда Вы сможете ссылаться на созданную книгу в своей программе.
При первом сохранении новой книги применяйте метод SaveAs, а в последующем — метод Save. Метод GetSaveAsFilename очень похож на метод GetOpenFilename, описанный в предыдущем разделе. Попробуем создать книгу и сохранить ее методом GetSaveAsFilename:
Sub CreateAndSave() Set newBook = Workbooks.Add Do fName = Application.GetSaveAsFilename Loop Until fName <> False newBook.SaveAs Filename :=fName End Sub
3.5. Работа с объектом Range
Объект Range представляет отдельную ячейку, диапазон ячеек, целую строку или колонку, несколько выделенных областей или трехмерный диапазон. Объект Range несколько необычен, поскольку может представлять как одну, так и множество ячеек. Для объекта Range не предусмотрен специальный объект-набор, и в зависимости от конкретной ситуации его можно считать либо отдельным объектом, либо набором. Объект Range возвращают многие свойства и методы, подробно о которых см. соответствующие разделы справочной системы.
3.6. Строковые ссылки в стиле а1 или имена диапазонов
Самый распространенный способ получить объект Range — сделать ссылку в стиле А1 или по имени диапазона, как показано в таблице:
Чтобы: |
Напишите: |
Изменить значение в ячейке А1на листе Sheet1 |
Worksheets("Sheet1").Range( "А1") .Value=3 |
Установить формулу для ячейки Bl на активном листе |
Range("B1") .Formula = "=5-10*RAND()" |
Присвоить значение всем ячейкам диапазона С1:ЕЗ на активном листе |
Range("C1:E3").Value = 6 |
Очистить содержимое диапазона А1:ЕЗ на активном листе |
Range("A1", "E3").ClearContents |
Установить полужирное начертание шрифта для диапазона myRange (имя на уровне книги) |
Range("myRange"). Font. Bold = True |
Присвоить значение всем ячейкам диапазона yourRange (имя на уровне листа) |
Range( "Sheetl!yourRange"). Value = 3 |
Присвоить объектной переменной ссылку на диапазон |
Set objRange = Range( "myRange") |
Помните, что выражения типа Range("С1:Е3"). Value = 6 подразумевают обращение к свойству Range активного листа. Если Вы попытаетесь выполнить это выражение в тот момент, когда активен лист диаграммы, произойдет ошибка периода выполнения (с кодом 1004).
Еще одна причина ошибок — использование свойства Range в качестве аргумента другого метода без полного описания объекта Worksheet, к которому оно относится. В следующем примере, который должен был бы сортировать диапазон ячеек на листе Sheet1, тоже возникает ошибка периода выполнения 1004:
Sub SortRange() Worksheets( "Sheet1 ").Range("A1:B10") .Sort key1 :=Range("A1" ), order1 :=xlDescending End Sub
Такую ошибку обнаружить труднее, поскольку строка, из которой вызывается метод Sort, сама по себе корректна. Ошибка возникает во второй строке, где указан аргумент key1. Этот код будет работать правильно, если активным листом является Sheet1, но приведет к ошибке при обращении к нему из другого листа или модуля. Во избежание подобных ошибок используйте при задании аргумента свойство Worksheets:
Sub SortRange() Worksheets("Sheet1").Range("A1 :B10").Sort key1 : Worksheets ("Sheet1") .Range("A1"), order1 :=xlDescending End Sub