пятница, 29 марта 2019 г.

VBA. Вызов функций WinAPI в зависимости от версий Windows и MS Office.


VBA. Вызов функций WinAPI в зависимости от версий Windows и MS Office.



В MS Office 2010 встроен VBA (VBA7), в отличие от ранних версий Excel, требуется предусмотреть в коде макросов различных варианты вызова API-функций Windows, чтобы они сохранили свою работоспособность при работе в любой версии MS Office.

Кроме того, в 64-битных Windows синтаксис вызова функций WinAPI отличается от 32-битных систем.
В общем случае, код, корректно работающий в 64-битной Windows, будет выглядеть так:

If VBA7 Then
    Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA"_
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Else
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA"_
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
End If

Рекомендуется использовать операторы Declare с ключевым словом PtrSafe.(<Ключевое слово> PtrSafe) Для правильной работы операторов Declare с ключевым словом PtrSafe в среде разработки VBA7 на 32-разрядных и 64-разрядных платформах необходимо обновить все типы данных в операторе Declare (параметры и возвращаемые значения), предполагающие хранение 64-разрядных величин, чтобы можно было использовать тип LongLong для 64-разрядных целых чисел или тип LongPtr для указателей и дескрипторов. Чтобы обеспечить обратную совместимость с VBA 6 и более ранними версиями, используйте следующую конструкцию.

#If Vba7 Then 
Declare PtrSafe Sub... 
#Else 
Declare Sub... 
#EndIf





Комментариев нет:

Отправить комментарий