Иногда даже при программировании на таком языке, как VBA, возникает необходимость использовать API-функции Windows. Эти стандартные функции действительно предоставляют программисту поистине огромные возможности – от управления отображением окон и кнопок до организации сетевого взаимодействия. Всего Windows API (Application Programming Interface) насчитывает около 1000 различных функций.
Чтобы API-функцию можно было вызывать из программы на VBA, ее нужно объявить с использованием инструкции Declare:
[Public | Private] Declare Function Имя Lib «Библиотека» _
[Alias «Псевдоним»] [([Аргументы])] [As Имя_типа]
или, если API-функция не возвращает значения:
[Public | Private] Declare Sub Имя Lib «Библиотека» [Alias «Псевдоним»] _
[([Аргументы])]
Данная инструкция помещается в блоке объявлений модуля. Ключевые слова Public и Private задают область видимости объявляемой API-функции аналогично обычной процедуре или функции. Единственной особенностью является то, что при объявлении API-функции в модуле класса нужно использовать Private. Назначение остальных элементов инструкции Declare поясняется в табл. 1.14.
Таблица 1.14. Элементы инструкции Declare
Ниже приведен пример объявления API-функции получения имени текущего пользователя без использования псевдонима:
Declare Function GetUserNameA Lib «advapi32.dll» _
(ByVal lpBuffer As String, nSize As Long) As Long
а также с использованием псевдонима:
Declare Function GetUserName Lib «advapi32.dll» Alias
«GetUserNameA» _
(ByVal lpBuffer As String, nSize As Long) As Long
При использовании первой из приведенных инструкций для вызова функции нужно использовать имя GetUserNameA. При использовании второй – имя GetUserName.
Вызов API-функций, объявленных с помощью инструкции Declare Function, ничем не отличается от вызова других функций: программист волен использовать инструкцию Call или употреблять функцию в выражениях. Если API-функция объявлена с использованием Declare Sub, то для вызова может применяться только инструкция Call (аналогично процедуре).
Для закрепления изложенного выше рассмотрим пример использования API-функции GetUserName для получения имени текущего пользователя компьютера:
' Объявление API-функции с использованием псевдонима