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 ]
Bestandteil | 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 nach Verweis übergeben wird. ByRef ist die Standardeinstellung in VBA im Gegensatz zu Visual Basic .NET. |
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.