Вы уже знаете, что можете использовать подпрограммы в своих макросах. VBA также позволяет вам определять функции, которые можно использовать в ваших макросах. Разница между функциями и подпрограммами заключается в том, что функции могут возвращать значения, а подпрограммы — нет. Рассмотрим следующий макрос:

Sub Macro1()

TooMany = TestFunc     If TooMany Then MsgBox "Too many columns selected"

End Sub
Function TestFunc()

TestFunc = False     If Selection.Columns.Count > 10 Then        TestFunc = True     End If End Function

Макрос (Macro1) вызывает функцию TestFunc. Эта функция возвращает либо значение False, либо True, в зависимости от выполняемого теста. Затем Macro1 воздействует на возвращенное значение. Обратите внимание, что имя функции может отображаться справа от знака равенства. Это делает функции очень мощными и важной частью любой программы. Внутри функции результат присваивается TestFunc, что является именем самой функции; это значение, возвращаемое функцией.

Как и в случае с подпрограммами, вы также можете передавать параметры своим функциям.

Это показано в следующем макросе:

Sub Macro1()

A = 12.3456     MsgBox A & vbCrLf & RoundIt(A)

End Sub
Function RoundIt(X) As Integer     RoundIt = Int(X + 0.5)

End Function

Этот простой макрос (Macro1) определяет число, а затем использует окно сообщения для его отображения и результата передачи числа в функцию RoundIt. Результатом будет 12.3456 и 12. Обратите внимание, что параметр следует передавать функции в круглых скобках. Также обратите внимание, что функция не использует то же имя переменной, которое было передано. Это связано с тем, что VBA переназначает значение X (то, что нужно функции), чтобы оно соответствовало значению A (то, что программа передает функции).

При передаче параметров функциям важно помнить, что ваша программа должна передавать то же количество параметров, которое ожидает функция, и параметры должны иметь совпадающие типы и в правильном порядке.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (2259) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Understanding_Functions_in_Macros [Общие сведения о функциях в макросах].