Declare-Anweisung

Wird auf der Modulebene verwendet, um die Verweise auf externe Prozeduren in einer DLL-Datei (Dynamic-Link Library) zu deklarieren.

Hinweis

Als Syntax werden Declare-Anweisungen mit dem Schlüsselwort PtrSafe empfohlen. Declare-Anweisungen mit PtrSafe funktionieren erst dann ordnungsgemäß auf 32-Bit- und 64-Bit-Plattformen der VBA Version 7-Entwicklungsumgebung, nachdem alle Datentypen in der Declare-Anweisung (Parameter und Rückgabewerte), die 64-Bit-Mengen speichern müssen, auf die Verwendung von LongLong für 64-Bit-Integrale oder LongPtr für Zeiger und Handles aktualisiert wurden. Um die Abwärtskompatibilität mit VBA Version 6 und früher sicherzustellen, verwenden Sie das folgende Konstrukt:

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

Syntax 1

[ Öffentlich | Privat ] DeclareSubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Syntax 2

[ Öffentlich | Privat ] DeclareFunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ Astype ]

Syntax der Declare-Anweisung für VBA7

Hinweis

Damit der Code in 64-Bit-Versionen von Microsoft Office ausgeführt werden kann, müssen alle Declare-Anweisungen das Schlüsselwort PtrSafe enthalten, und alle Datentypen in der Declare-Anweisung (Parameter und Rückgabewerte), die 64-Bit-Daten speichern, müssen aktualisiert werden, damit sie LongLong für 64-Bit-Integrale oder LongPtr für Zeiger und Handles verwenden.

Syntax 1 (Sub)

[ Öffentlich | Privat ] DeclarePtrSafeSubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] ]

Syntax 2 (Function)

[ Öffentlich | Privat ] DeclarePtrSafeFunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ] ] [ Astype ]

Teil Beschreibung
Public Optional. Wird verwendet, um Prozeduren zu deklarieren, die für alle anderen Prozeduren in allen Modulen verfügbar sind.
Private Optional. Wird verwendet, um Prozeduren zu deklarieren, die nur im Modul verfügbar sind, in dem die Deklaration erfolgt.
PtrSafe Erforderlich für 64-Bit-Version. Mit dem Schlüsselwort PtrSafe wird bestätigt, dass eine Declare-Anweisung sicher in einer 64-Bit-Version von Microsoft Office ausgeführt werden kann.
Sub Optional (entweder Sub oder Function muss vorhanden sein). Gibt an, dass die Prozedur keinen Wert zurückgibt.
Function Optional (entweder Sub oder Function muss vorhanden sein). Gibt an, dass die Prozedur einen Wert zurückgibt, der in einem Ausdruck verwendet werden kann.
name Erforderlich. Ein gültiger Prozedurname. Beachten Sie, dass bei DLL-Einstiegspunkten Groß-/Kleinschreibung beachtet wird.
Lib Erforderlich. Gibt an, dass eine DLL oder Coderessource die zu deklarierende Prozedur enthält. Die Lib-Klausel ist für alle Deklarationen erforderlich.
libname Erforderlich. Name der DLL-Datei oder Coderessource, die die deklarierte Prozedur enthält.
Alias Optional. Gibt an, dass die aufgerufene Prozedur in der DLL einen anderen Namen aufweist. Das ist hilfreich, wenn der externe Prozedurenname identisch mit einem Schlüsselwort ist. Sie können Alias auch verwenden, wenn eine DLL-Prozedur den gleichen Namen wie eine öffentliche Variable, Konstante oder eine andere Prozedur im selben Bereich hat. Alias ist auch hilfreich, wenn einige Zeichen im Namen der DLL-Prozedur aufgrund der DLL-Benennungskonvention nicht zulässig sind.
aliasname Optional. Name der Prozedur in der DLL oder Coderessource. Wenn das erste Zeichen kein Nummernzeichen ist (#), ist aliasname der Name des Einstiegspunkts der Prozedur in der DLL. Wenn (#) das erste Zeichen ist, müssen alle nachfolgenden Zeichen die Ordnungszahl des Einstiegspunkts der Prozedur darstellen.
arglist Optional. Eine Liste mit Variablen, die die Argumente darstellen, die beim Aufruf an die Prozedur weitergegeben werden.
type Optional. Datentyp des Werts, der von einer Function-Prozedur zurückgegeben wird; kann Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (derzeit nicht unterstützt), Date, String (nur Variablenlänge), Variant, ein benutzerdefinierter Typ oder ein Objekttyp sein. (LongLong ist nur für 64-Bit-Plattformen ein gültiger Deklarationstyp.)

Das arglist-Argument weist die folgende Syntax und folgende Teile auf:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ]

Teil Beschreibung
Optional Optional. Gibt an, dass ein Argument nicht erforderlich ist. Wenn verwendet, müssen alle nachfolgenden Argumente in arglist optional sein und mithilfe des Schlüsselworts Optional deklariert werden. Optional kann nicht für Argumente verwendet werden, wenn ParamArray verwendet wird.
ByVal Optional. Gibt an, dass das Argument nach Wert übergeben wird.
ByRef Gibt an, dass das Argument durch Verweis übergeben wird. ByRef ist die Standardeinstellung in Visual Basic.
ParamArray Optional. Wird nur als letztes Argument in arglist verwendet, um anzugeben, dass das letzte Argument ein optionalesArray von Variant-Elementen ist. Mit dem Schlüsselwort ParamArray können Sie eine beliebige Anzahl von Argumenten bereitstellen. Das Schlüsselwort ParamArray kann nicht mit ByVal, ByRef oder Optional verwendet werden.
varname Erforderlich. Name der Variable, die das Argument darstellt, das an die Prozedur weitergegeben wird; folgt den Standardbenennungskonventionen für Variablen.
( ) Erforderlich für Arrayvariablen. Gibt an, dass varname ein Array ist.
type Optional. Datentyp des Arguments, das an die Prozedur übergeben wird; kann Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (derzeit nicht unterstützt), Date, String (nur variable Länge), Object, Variant, ein benutzerdefinierter Typ oder ein Objekttyp sein. (LongLong ist nur für 64-Bit-Plattformen ein gültiger Deklarationstyp.)

Hinweise

Declare Sub First Lib "MyLib" () 

Wenn Sie eine Argumentliste einbinden, werden bei jedem Aufruf der Prozedur die Anzahl und die Datentypen der Argumente überprüft. Im folgenden Beispiel wird ein Long-Argument akzeptiert:

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

Hinweis

  • Sie können keine Zeichenfolgen mit fest definierter Länge in der Argumentliste einer Declare-Anweisung verwenden; es können nur Zeichenfolgen mit variabler Länge an Prozeduren übergeben werden. Zeichenfolgen mit fest definierter Länge können als Prozedurargumente verwendet werden. Sie werden jedoch vor der Weitergabe in Zeichenfolgen mit variabler Länge konvertiert.
  • Die Konstante vbNullString wird beim Aufrufen externer Prozeduren verwendet, wenn die externe Prozedur eine Zeichenfolge mit dem Wert Null erfordert. Diese ist nicht identisch mit einer Zeichenfolge der Länge Null ("").

Beispiel

Dieses Beispiel zeigt, wie die Declare-Anweisung auf der Modulebene eines Standardmoduls verwendet wird, um einen Verweis auf eine externe Prozedur in einer DLL (Dynamic-Link Library) zu deklarieren. Sie können die Declare-Anweisungen in Klassenmodulen platzieren, wenn die Declare-Anweisungen Private sind.

' 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 
 

Siehe auch

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.