Declare-AnweisungDeclare statement

Wird auf der Modulebene verwendet, um die Verweise auf externe Prozeduren in einer DLL-Datei (Dynamic-Link Library) zu deklarieren.Used at the module level to declare references to external procedures in a dynamic-link library (DLL).

Hinweis

Als Syntax werden Declare-Anweisungen mit dem Schlüsselwort PtrSafe empfohlen.Declare statements with the PtrSafe keyword is the recommended syntax. 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.Declare statements that include PtrSafe work correctly in the VBA version 7 development environment on both 32-bit and 64-bit platforms only after all data types in the Declare statement (parameters and return values) that need to store 64-bit quantities are updated to use LongLong for 64-bit integrals or LongPtr for pointers and handles. Um die Abwärtskompatibilität mit VBA Version 6 und früher sicherzustellen, verwenden Sie das folgende Konstrukt:To ensure backwards compatibility with VBA version 6 and earlier, use the following construct:

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

Syntax 1Syntax 1

[ Public | Private ] Declare SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ][ Public | Private ] Declare SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Syntax 2Syntax 2

[ Public | private ] Deklarieren Sie Function (Funktion ) Name Lib "libname" [ Alias "Aliasname"] [([ Arglist ])] [ As Type ][ Public | Private ] Declare FunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ As type ]

Syntax der Declare-Anweisung für VBA7VBA7 Declare statement syntax

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.For code to run in 64-bit versions of Microsoft Office, all Declare statements must include the PtrSafe keyword, and all data types in the Declare statement (parameters and return values) that need to store 64-bit quantities must be updated to use LongLong for 64-bit integrals or LongPtr for pointers and handles.

Syntax 1 (Sub)Syntax 1 (Sub)

[ Public | Private ] Declare PtrSafe SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ][ Public | Private ] Declare PtrSafe SubnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ]

Syntax 2 (Function)Syntax 2 (Function)

[ Public | private ] Deklarieren Sie PtrSafe Function (Funktion ) Name Lib "libname" [ Alias "Aliasname"] [([ Arglist ])] [ As Type ][ Public | Private ] Declare PtrSafe FunctionnameLib "libname" [ Alias "aliasname" ] [ ( [ arglist ] ) ] [ As type ]

TeilPart BeschreibungDescription
PublicPublic Optional.Optional. Wird verwendet, um Prozeduren zu deklarieren, die für alle anderen Prozeduren in allen Modulen verfügbar sind.Used to declare procedures that are available to all other procedures in all modules.
PrivatePrivate Optional.Optional. Wird verwendet, um Prozeduren zu deklarieren, die nur im Modul verfügbar sind, in dem die Deklaration erfolgt.Used to declare procedures that are available only within the module where the declaration is made.
PtrSafePtrSafe Erforderlich für 64-Bit-Version.Required on 64-bit. 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.The PtrSafe keyword asserts that a Declare statement is safe to run in 64-bit versions of Microsoft Office.
SubSub Optional (entweder Sub oder Function muss vorhanden sein).Optional (either Sub or Function must appear). Gibt an, dass die Prozedur keinen Wert zurückgibt.Indicates that the procedure doesn't return a value.
FunctionFunction Optional (entweder Sub oder Function muss vorhanden sein).Optional (either Sub or Function must appear). Gibt an, dass die Prozedur einen Wert zurückgibt, der in einem Ausdruck verwendet werden kann.Indicates that the procedure returns a value that can be used in an expression.
namename Erforderlich.Required. Ein gültiger Prozedurname.Any valid procedure name. Beachten Sie, dass bei DLL-Einstiegspunkten Groß-/Kleinschreibung beachtet wird.Note that DLL entry points are case-sensitive.
LibLib Erforderlich.Required. Gibt an, dass eine DLL oder Coderessource die zu deklarierende Prozedur enthält.Indicates that a DLL or code resource contains the procedure being declared. Die Lib-Klausel ist für alle Deklarationen erforderlich.The Lib clause is required for all declarations.
libnamelibname Erforderlich.Required. Name der DLL-Datei oder Coderessource, die die deklarierte Prozedur enthält.Name of the DLL or code resource that contains the declared procedure.
AliasAlias Optional.Optional. Gibt an, dass die aufgerufene Prozedur in der DLL einen anderen Namen aufweist.Indicates that the procedure being called has another name in the DLL. Das ist hilfreich, wenn der externe Prozedurenname identisch mit einem Schlüsselwort ist.This is useful when the external procedure name is the same as a keyword. 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.You can also use Alias when a DLL procedure has the same name as a public variable, constant, or any other procedure in the same scope. Alias ist auch hilfreich, wenn einige Zeichen im Namen der DLL-Prozedur aufgrund der DLL-Benennungskonvention nicht zulässig sind.Alias is also useful if any characters in the DLL procedure name aren't allowed by the DLL naming convention.
aliasnamealiasname Optional.Optional. Name der Prozedur in der DLL oder Coderessource.Name of the procedure in the DLL or code resource. Wenn das erste Zeichen kein Nummernzeichen ist (#), ist aliasname der Name des Einstiegspunkts der Prozedur in der DLL.If the first character is not a number sign (#), aliasname is the name of the procedure's entry point in the DLL. Wenn (#) das erste Zeichen ist, müssen alle nachfolgenden Zeichen die Ordnungszahl des Einstiegspunkts der Prozedur darstellen.If (#) is the first character, all characters that follow must indicate the ordinal number of the procedure's entry point.
arglistarglist Optional.Optional. Eine Liste mit Variablen, die die Argumente darstellen, die beim Aufruf an die Prozedur weitergegeben werden.List of variables representing arguments that are passed to the procedure when it is called.
typetype Optional.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.Data type of the value returned by a Function procedure; may be Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Variant, a user-defined type, or an object type. (LongLong ist nur für 64-Bit-Plattformen ein gültiger Deklarationstyp.)(LongLong is a valid declared type only on 64-bit platforms.)

Das arglist-Argument weist die folgende Syntax und folgende Teile auf:The arglist argument has the following syntax and parts:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [()] [ Als Typ ][ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ As type ]

TeilPart BeschreibungDescription
OptionalOptional Optional.Optional. Gibt an, dass ein Argument nicht erforderlich ist.Indicates that an argument is not required. Wenn verwendet, müssen alle nachfolgenden Argumente in arglist optional sein und mithilfe des Schlüsselworts Optional deklariert werden.If used, all subsequent arguments in arglist must also be optional and declared by using the Optional keyword. Optional kann nicht für Argumente verwendet werden, wenn ParamArray verwendet wird.Optional can't be used for any argument if ParamArray is used.
ByValByVal Optional.Optional. Gibt an, dass das Argument nach Wert übergeben wird.Indicates that the argument is passed by value.
ByRefByRef Gibt an, dass das Argument durch Verweis übergeben wird.Indicates that the argument is passed by reference. ByRef ist die Standardeinstellung in Visual Basic.ByRef is the default in Visual Basic.
ParamArrayParamArray Optional.Optional. Wird nur als das letzte Argument in arglist verwendet, um darauf hinzuweisen, dass das letzte Argument ein Optionales Array aus Variant-Elementen ist.Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. Mit dem Schlüsselwort ParamArray kann eine beliebige Anzahl von Argumenten angegeben werden.The ParamArray keyword allows you to provide an arbitrary number of arguments. Das Schlüsselwort ParamArray kann nicht mit ByVal, ByRef oder Optional verwendet werden.The ParamArray keyword can't be used with ByVal, ByRef, or Optional.
varnamevarname Erforderlich.Required. Name der Variable, die das Argument darstellt, das an die Prozedur weitergegeben wird; folgt den Standardbenennungskonventionen für Variablen.Name of the variable representing the argument being passed to the procedure; follows standard variable naming conventions.
( ) Erforderlich für Arrayvariablen.Required for array variables. Gibt an, dass varname ein Array ist.Indicates that varname is an array.
typetype Optional.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.Data type of the argument passed to the procedure; may be Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (not currently supported), Date, String (variable length only), Object, Variant, a user-defined type, or an object type. (LongLong ist nur für 64-Bit-Plattformen ein gültiger Deklarationstyp.)(LongLong is a valid declared type only on 64-bit platforms.)

HinweiseRemarks

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.If you include an argument list, the number and type of arguments are checked each time the procedure is called. Im folgenden Beispiel wird ein Long-Argument akzeptiert:The following example takes one Long argument:

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.You can't have fixed-length strings in the argument list of a Declare statement; only variable-length strings can be passed to procedures. 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.Fixed-length strings can appear as procedure arguments, but they are converted to variable-length strings before being passed.
  • Die Konstante vbNullString wird beim Aufrufen externer Prozeduren verwendet, wenn die externe Prozedur eine Zeichenfolge mit dem Wert Null erfordert.The vbNullString constant is used when calling external procedures, where the external procedure requires a string whose value is zero. Diese ist nicht identisch mit einer Zeichenfolge der Länge Null ("").This is not the same thing as a zero-length string ("").

BeispielExample

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.This example shows how the Declare statement is used at the module level of a standard module to declare a reference to an external procedure in a dynamic-link library (DLL). Sie können die Declare-Anweisungen in Klassenmodulen platzieren, wenn die Declare-Anweisungen Private sind.You can place the Declare statements in class modules if the Declare statements are 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. You can 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 auchSee also

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.