Поделиться через


Оператор Declare

Используется на уровне модуля для объявления ссылок на внешние процедуры в библиотеке динамической компоновки (DLL).

Примечание.

Операторы Declare с ключевым словом PtrSafe представляют собой рекомендованный синтаксис. Инструкции Declare , включающие PtrSafe , правильно работают в среде разработки VBA версии 7 как на 32-разрядных, так и на 64-разрядных платформах только после того, как все типы данных в инструкции Declare (параметры и возвращаемые значения), которым необходимо хранить 64-разрядные количества, будут обновлены для использования LongLong для 64-разрядных интегралов или LongPtr для указателей и дескрипторов. Чтобы обеспечить обратную совместимость с VBA версии 6 и более ранних версий, используйте следующую конструкцию:

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

Синтаксис 1

[ Общедоступная | Приватный ] ОбъявлениевложенногоимениLib "libname" [ Псевдоним "псевдоним" ] [ ( [ arglist ] ) ]

Синтаксис 2

[ Общедоступная | Приватный ] ОбъявлениеименифункцииLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Astype ]

Синтаксис оператора VBA7 Declare

Примечание.

Для выполнения кода в 64-разрядных версиях Microsoft Office все инструкции Declare должны включать ключевое слово PtrSafe, а все типы данных в инструкции Declare (параметры и возвращаемые значения), которые должны хранить 64-разрядные количества, должны быть обновлены, чтобы использовать LongLong для 64-разрядных интегралов или LongPtr для указателей и дескрипторов.

Синтаксис 1 (Sub)

[ Общедоступная | Приватный ] ОбъявлениеPtrSafeSubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Синтаксис 2 (Function)

[ Общедоступная | Приватный ] ОбъявлениеPtrSafeFunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Astype ]

Part Описание
Public Необязательный параметр. Используется для объявления процедур, которые доступны всем другим процедурам во всех модулях.
Private Необязательный параметр. Используется для объявления процедур, которые доступны только в рамках модуля, в котором делается объявление.
PtrSafe Требуется 64-разрядная версия. В ключевое слово PtrSafe утверждается, что инструкция Declare безопасна для запуска в 64-разрядных версиях Microsoft Office.
Sub Необязательный (должен появиться sub или function ). Указывает, что процедура не возвращает значение.
Function Необязательный элемент (должно появиться свойство Sub или Function). Указывает, что процедура возвращает значение, которое может использоваться в выражении.
name Обязательно. Имя любой действительной процедуры. Обратите внимание, что в точках входа DLL учитывается регистр.
Lib Обязательно. Указывает, что источник DLL или кода содержит объявленную процедуру. Предложение Lib необходимо для всех объявлений.
libname Обязательно. Имя источника DLL или кода, содержащее объявленную процедуру.
Alias Необязательный параметр. Указывает, что вызванная процедура имеет другое имя в DLL. Это полезно, когда имя внешней процедуры совпадает с ключевым словом. Вы также можете использовать свойство Alias, если имя процедуры DLL совпадает с именем общедоступной переменной, константы или другой процедуры в этой области. Свойство Alias также полезно, если знаки в имени процедуры DLL не разрешены соглашением об именовании DLL.
псевдоним Необязательный параметр. Имя процедуры в DLL или источнике кода. Если первый знак не является цифрой (#), aliasname — имя точки входа процедуры в DLL. Если первым знаком является (#), все последующие знаки должны указывать порядковый номер точки входа процедуры.
arglist Необязательный параметр. Список переменных, представляющий аргументы, которые передаются в процедуру при ее вызове.
type Необязательный параметр. Тип данных значения, возвращаемого процедурой Function; Может быть Byte, Boolean, Integer, LongLong, LongPtr, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (только переменная длина), Variant, определяемый пользователем тип или тип объекта. (LongLong - это действительный объявленный тип только для 64-разрядных платформ.)

Аргумент arglist имеет следующий синтаксис и элементы:

[ Необязательно ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ]

Part Описание
Необязательное Необязательный параметр. Указывает, что аргумент не является обязательным. Если он используется, все последующие аргументы в arglist тоже должны быть необязательными и объявляться с использованием ключевого слова Optional. Optional не может использоваться для каких-либо аргументов, если используется ParamArray.
ByVal Необязательный параметр. Указывает, что аргумент передается значением.
ByRef Указывает, что аргумент передается по ссылке. ByRef используется по умолчанию в VBA, в отличие от Visual Basic .NET.
ParamArray Необязательный параметр. Используется только как последний аргумент в списке аргументов, чтобы указать, что последний аргумент является необязательныммассивом элементов типа Variant. Ключевое слово ParamArray позволяет предоставлять произвольное число аргументов. Ключевое слово ParamArray не может использоваться со свойствами ByVal, ByRef или Optional.
varname Обязательно. Имя переменной, представляющее аргумент, который передается процедуре; соответствует стандартным соглашениям об именовании переменных.
( ) Обязательный элемент для массива переменных. Указывает, что varname является массивом.
type Необязательный параметр. Тип данных аргумента передается процедуре и может быть таким: Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (на данный момент не поддерживается), Date, String (только строки переменной длины), Object, Variant, определяемый пользователем тип или тип объекта. (LongLong — действительный объявленный тип только для 64-разрядных платформ.)

Замечания

Declare Sub First Lib "MyLib" () 

При использовании списка аргументов количество и тип аргументов проверяется при каждом вызове процедуры. В следующем примере принимается один аргумент Long :

Declare Sub First Lib "MyLib" (X As Long) 

Примечание.

  • Строки фиксированной длины не могут быть в списке аргументов оператора Declare ; В процедуры могут передаваться только строки переменной длины. Строки фиксированной длины могут отображаться как аргументы процедуры, но перед передачей они преобразуются в строки переменной длины.
  • Константа vbNullString используется при вызове внешних процедур, когда они требуют строку с нулевым значением. Это не то же, что и строка нулевой длины ("").

Пример

В этом примере показано, как оператор Declare используется на уровне модуля в стандартном модуле для объявления внешней процедуры в библиотеке динамической компоновки (DLL). Можно поместить операторы Declare в модули классов, если операторы Declare являются Private.

' In Microsoft Windows (16-bit): 
Declare Sub MessageBeep Lib "User" (ByVal N As Integer) 
' Assume SomeBeep is an alias for the procedure name. 
Declare Sub MessageBeep Lib "User" Alias "SomeBeep"(ByVal N As Integer) 
' Use an ordinal in the Alias clause to call GetWinFlags. 
Declare Function GetWinFlags Lib "Kernel" Alias "#132"()As Long 
 
' In 32-bit Microsoft Windows systems, specify the library USER32.DLL, 
' rather than USER.DLL. Use conditional compilation to write 
' code that can run on either Win32 or Win16. 
#If Win32 Then 
    Declare Sub MessageBeep Lib "User32" (ByVal N As Long) 
#Else 
    Declare Sub MessageBeep Lib "User" (ByVal N As Integer) 
#End If 
 
 
' 64-bit Declare statement example: 
Declare PtrSafe Function GetActiveWindow Lib "User32" () As LongPtr 
 
' Conditional Compilation Example 
#If Vba7 Then 
     ' Code is running in  32-bit or 64-bit VBA7. 
     #If Win64 Then 
          ' Code is running in 64-bit VBA7. 
     #Else 
          ' Code is not running in 64-bit VBA7. 
     #End If 
#Else 
     ' Code is NOT running in 32-bit or 64-bit VBA7. 
#End If 
 

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.