- •Содержание
- •Алгоритмизация и программирование vba введение
- •1 Макросы
- •На панели быстрого запуска
- •2. Алгоритмизация
- •2.1 Алгоритм. Общие сведения.
- •Форма записи алгоритма на естественном языке
- •2.3 Графическая форма записи алгоритма
- •2.4 Правила оформления схем алгоритмов
- •2.5 Основные этапы подготовки и решения задачи на компьютере
- •2.6 Постановка задачи. Разработка математической модели
- •Складских помещений
- •Равным плану d в виде блок-схемы
- •Массива по строкам
- •3 Язык программирования
- •Функции InputBox
- •Воды предприятием и номера месяца с минимальным расходом в виде блок-схемы
- •Программирование на vba в microsoft office
- •4.1 Программирование на vba в Excel
- •(Для наглядности выделен)
- •В нём активной ячейки
- •В формуле ячейки
- •Change объекта WorkSheet
- •4.2 Программирование на vba в Word
- •4.3 Программирование на vba в PowerPoint
- •«Элементы управления»
- •5 Технология организации, хранения и обработки данных
- •5.1 Общие сведения
- •5.2 Листинг программы
- •5.3 Алгоритм программы
- •5.4 Результат работы
- •Список использованных источников
В формуле ячейки
Можно добавить к функции описание, которое будет появляться в диалоговом окне мастера вставки функций Excel при выборе функции. Чтобы создать описание, на вкладке «Вид» ленты приложения в группе «Макросы» раскройте меню кнопки «Макросы» и выберите команду «Макросы», а затем в раскрывшемся диалоговом окне «Макрос» в поле «Имя макроса» введите имя функции (по умолчанию функции не отображаются в списке макросов этого окна). Теперь щелкните на кнопке «Параметры» и введите описание функции в поле «Описание» раскрывшегося диалогового окна «Параметры» макроса (рисунок 4.11). По завершении щелкните на кнопке «ОК» и закройте окно «Макрос».
Если нужная функция хранится в текущей книге, достаточно просто написать ее имя в ячейке формулы. Для того чтобы использовать функцию, хранящуюся в другой открытой книге, имени функции должно предшествовать имя рабочей книги и восклицательный знак.
Например: =Личные_функции.xlsm!SeparatorAvailable().
Для доступа к функциям, хранящимся в книгах, не открытых в текущий момент, необходимо создать на них ссылку. Для этого в окне редактора VBA выберите команду Tools ->References. Если нужная рабочая книга — точнее, имя требуемого VBA-проекта, сохраняемого в этой книге, — не представлена в списке раскрывшегося диалогового окна References, щелкните на кнопке Browse для ее локализации и добавления в список. Если в раскрывшемся диалоговом окне Add References флажок рядом с требуемым проектом не установлен, обязательно установите его для активизации ссылки. Теперь любую из содержащихся в данном проекте функций можно использовать, просто указав ее имя, не указывая при этом имени книги.
Если при выполнении пользовательской функции, помещенной в формулу рабочего листа, происходит ошибка, обычное сообщение об ошибке в VBA-функции не выводится. Все, что можно будет увидеть в этом случае, — лишь малопонятное сообщение об ошибке вроде #ЗНАЧ! в ячейке, содержащей формулу. Поэтому прежде чем использовать функцию в своих рабочих листах, обязательно протестируйте ее работу, организовав ее вызов в редакторе VBA через процедуру Sub.
Рисунок 4.11 − Ввод описания пользовательской функции
В этом случае будут выводиться обычные сообщения об ошибках VBA, с предоставлением доступа к инструментам отладки. Если функция требует передачи ей ссылки на ячейки, при ее вызове для проверки функционирования необходимо использовать объект Range.
Sub Тест()
Результат = Функция1(Range("В8:В13"), Range("С8"))
MsgBox Результат
End Sub
Кроме того, для отладки можно в код функции, указанной в формуле на рабочем листе, поместить в редакторе VBA точку прерывания. Функция будет запускаться при каждом пересчете Excel рабочего листа, и как только при ее выполнении будет достигнута строка, содержащая точку прерывания, автоматически откроется окно редактора VBA с текстом функции, подготовленным к проведению отладки.
Функции, определенные пользователем, должны храниться в стандартных программных модулях. Модули рабочих листов и модуль Эта книга (ThisWorkbook), также представленные в окне проектов, являются специальными модулями и для этой цели не подходят. Поэтому функция, размещенная в одном из таких модулей, не будет воспринята Excel как функция, определенная пользователем.
Использование встроенных функций Excel
Приложение Excel имеет массу встроенных функций, которые выполняют разнообразные вычисления с данными рабочего листа. Из VBA-программ эти функции можно вставлять в ячейки рабочей таблицы, а затем получать результат их выполнения. Предположим, что ячейки А1:А10 содержат числа, среди которых необходимо найти наибольшее. Функция МАХ (МАКС) возвращает наибольшее значение в диапазоне, поэтому для решения поставленной задачи можно поместить ее в некоторую ячейку и использовать возвращаемый ею результат.
Worksheets("лист1").Range("A11").Value = "=max(A1:A10)"
Максимум = Worksheets("Лист1").Range("A11").Value
Однако если на самом рабочем листе это вычисленное значение показывать не нужно, а требуется оно только VBA-программе, то для получения результата применения любой функции Excel к диапазону рабочего листа, без непосредственной вставки этой функции в рабочий лист, можно использовать объект WorksheetFunction. Ссылка на этот объект имеется в свойстве WorksheetFunction объекта Application. Синтаксис обращения к данному объекту следующий.
Application.WorksheetFunction.Имя_функции(Аргументы)
Здесь параметр Имя_функции заменяется именем требуемой функции рабочего листа, а параметр Аргументы — аргументами этой функции. Следующий пример заменяет фрагмент кода, приведенный выше.
LargestValue=Application.WorksheetFunction.Max(Range("A1:A10"))
Программирование событий Excel
В Excel написание кода для обработки событий часто играет более значимую роль, нежели в остальных приложениях пакета Office. Изменение значения лишь одной ячейки, используемой при вычислении формулы или построении диаграммы, может привести к существенным последствиям для всей рабочей книги. В VBA программисту предоставлены возможности для перехвата событий, управляющих данным процессом.
Прежде чем приступать к написанию текста программы, обязательно нужно решить, какой именно объект будет отвечать за обработку интересующего вас события. В Excel распознавать события способны только четыре объекта приложения: диаграммы, отдельные рабочие листы, рабочие книги и приложение Excel в целом. Если требуется написать код, отвечающий на некоторое событие, связанное с диаграммой, такой код лучше разместить в процедуре обработки события диаграммы. Однако для событий, являющихся ответом на изменения в рабочем листе, имеется несколько доступных вариантов.
Хотя некоторые события Excel распознают лишь определенные объекты, большинство событий образует восходящую иерархию от объекта Worksheet к объектам Workbook и Application. Например, внесенные в рабочий лист изменения инициируют событие Change (Изменение) объекта Worksheet, который в свою очередь инициирует событие SheetChange (Изменение листа) для объектов Workbook и Application. Учитывая сказанное выше, следует определить, где именно лучше всего разместить код процедуры обработки интересующего события — в объекте рабочего листа, рабочей книги или приложения. При выборе можно руководствоваться следующими замечаниями.
■ Если код должен выполняться только в ответ на изменения, внесенные в одном конкретном рабочем листе, его лучше поместить в процедуру обработки события данного рабочего листа.
■ Если код должен выполняться при внесении изменений в любой из рабочих листов определенной книги, его следует поместить в процедуру обработки события данной рабочей книги.
■ Если же код должен выполняться при внесении изменений в любую из открытых рабочих книг, его следует поместить в процедуру обработки события приложения.
Использование процедур обработки событий
Написание процедуры обработки события для любого из объектов Excel в сущности ничем не отличается от написания кода обработки события для формы или элемента управления VBA. Чтобы создать процедуру обработки события для любого объекта, выполните следующие действия:
1. Откройте окно редактирования кода для требуемого объекта (дважды щелкнув мышью на его имени в окне проектов).
2. Укажите объект, выбрав его имя в раскрывающемся списке Object в левом верхнем углу окна кода.
3. Далее следует выбрать в раскрывающемся списке Procedure, в правом верхнем углу окна кода, то событие, для которого должен быть написан код (рисунок 4.12).
4. В окне появляется “каркас” процедуры обработки выбранного события.
Рисунок 4.12 − Окно кода с заготовкой процедуры обработки события
