Excel. Трюки и эффекты. Алексей Гладкий

Читать онлайн книгу.

Excel. Трюки и эффекты - Алексей Гладкий


Скачать книгу
переменных уничтожаются, в том числе удаляются и локальные ссылки на объекты.

      Использование API-функций в VBA

      Иногда даже при программировании на таком языке, как VBA, возникает необходимость использовать API-функции Windows. Эти стандартные функции действительно предоставляют программисту поистине огромные возможности – от управления отображением окон и кнопок до организации сетевого взаимодействия. Всего Windows API (Application Programming Interface) насчитывает около 1000 различных функций.

      Объявление API-функций

      Чтобы 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-функций

      Вызов API-функций, объявленных с помощью инструкции Declare Function, ничем не отличается от вызова других функций: программист волен использовать инструкцию Call или употреблять функцию в выражениях. Если API-функция объявлена с использованием Declare Sub, то для вызова может применяться только инструкция Call (аналогично процедуре).

      Для закрепления изложенного выше рассмотрим пример использования API-функции GetUserName для получения имени текущего пользователя компьютера:

      ' Объявление API-функции с использованием псевдонима

      Declare Function GetUserName Lib «advapi32.dll» Alias

      «GetUserNameA» _

      (ByVal lpBuffer As String, nSize As Long) As Long

      Sub UserName()

      Dim strBuffer As String

      ' Создание строкового буфера для возврата значения функцией

      strBuffer = Space(100)

      ' Получение имени пользователя (ВЫЗОВ API-ФУНКЦИИ). _

      Функция возвращает ненулевое значение, если имя пользователя _

      записано в strBuffer

      If GetUserName(strBuffer, 100) Then

      ' Вывод имени пользователя

      MsgBox RTrim(strBuffer)

      Else

      MsgBox «Не удалось получить имя пользователя»

      End If

      End Sub

      Использование объектов Excel

      Программирование на VBA в Microsoft Office чаще всего представляет собой управление объектами соответствующего приложения. Не является исключением и программирование в Excel. Данный раздел ознакомит читателя с основными объектами, встроенными в Excel. Эти объекты используются в подавляющем большинстве примеров (трюков), приведенных в дальнейших главах книги.

      Объектная


Скачать книгу