Win Api & VBA


Как уменьшить количество строк кода при вызове функций Windows Api  в модуле VBA? Помочь решить этот вопрос может библиотека типов Win32.tlb от Брюса Мак-Кинни (Bruce McKinney).

Данная библиотека была собрана для упрощения вызова функций API  в VB4  в далеком 1995 году. Но, несмотря на такой солидный возраст ей можно с успехом пользоваться и сейчас в модулях VBA при обращении к функциям API. 

Рассмотрим пример использования библиотеки в Excel. Регистрация  библиотеки в системе не требуется, поэтому копируем библиотеку в любую папку, например,  в папку,  где расположена книга Excel или в папку Windows. Открываем книгу, переходим в редактор кода (Alt+F11), далее меню Tools->References, и в диалоговом окне нажав кнопку Browse выбираем файл Win32.tlb в искомой папке.Связь с библиотекой установлена, теперь можно посмотреть объекты данной библиотеки – меню View -> Object Browser (F2), в  списке библиотек выбираем Win.

Теперь, собственно пример использования библиотеки – вызов функции FindWindow (поиск окна верхнего уровня).

Private Sub StartCalculator()
‘Запуск калькулятора
Dim hProg As Long, ret As Long, hwnd As Long
On Error Resume Next
  hwnd = FindWindow(«SciCalc», sNullStr)
  If hwnd > 0 Then
    Call SetForegroundWindow(hwnd)
  Else
    hProg = Shell(«calc.exe «, vbNormalFocus)
  End If
End Sub 

Здесь использованы две функции из библиотеки типов:  FindWindow – происк окна верхнего уровня по имени класса (можно искать и по заголовку окна, используется второй параметр функции), и SetForegroundWindow – перевод найденного окна на передний план. Как видно из примера, использование библиотеки типов позволяет вызывать функции Win Api, как встроенные функции VBA.

Приложение содержит библиотеку Win32.tlb и книгу Excel c тремя примерами: чтение, запись ini- файлов и чтение ключей реестра. 

 

1 Comment

  1. CaSH_2004

    Интересно как это связано с 1С?

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *