Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algoritmizatsia_i_programmirovanie_VBA_polnaya_...doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
12.34 Mб
Скачать

В формуле ячейки

Можно добавить к функции описание, которое будет появляться в диалоговом окне мастера вставки функций 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 − Окно кода с заготовкой процедуры обработки события

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]