Table of contents
TOC
Réduire la table des matières
Développer la table des matières

Declare, instruction

office 365 dev account|Dernière mise à jour: 04/10/2017
|
1 Contributeur

Utilisée au niveau du module pour déclarer des références à des procédures externes d'une bibliothèque de liens dynamiques (DLL).

Remarque La syntaxe recommandée comprend des instructions Declare avec le mot clé PtrSafe. Les instructions Declare qui comprennent PtrSafe fonctionnent correctement dans l'environnement de développement VBA7 sur les plateformes 32 et 64 bits uniquement après la mise à jour de tous les types de données de l'instruction Declare (paramètres et valeurs renvoyées) qui doivent stocker des quantités 64 bits pour utiliser LongLong pour des intégrales 64 bits ou LongPtr pour des pointeurs et poignées. Pour assurer la compatibilité descendante avec VBA version 6 et versions antérieures, utilisez la construction suivante :

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

Syntaxe 1

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

Syntaxe 2

[ Public |Private ] DeclareFunctionnameLib"libname" [ Alias"aliasname" ] [ ( [ arglist ] ) ] [ Astype ]

Syntaxe de l'instruction Declare VBA7

Remarque Pour que le code fonctionne avec des versions 64 bits de Microsoft Office, toutes les instructions Declare doivent inclure le mot clé PtrSafe et tous les types de données de l'instruction Declare (paramètres et valeurs renvoyées) qui doivent stocker des quantités 64 bits doivent être mis à jour pour utiliser LongLong pour des intégrales 64 bits ou LongPtr pour des pointeurs et des poignées.

Syntaxe 1 (Sub)

[ Public |Private ] DeclarePtrSafe ** Sub** nameLib"libname" [ Alias"aliasname" ] [ ( [ arglist ] ) ]

Syntaxe 2 (Function)

[ Public |Private ] DeclarePtrSafeFunctionnameLib"libname" [ Alias"aliasname" ] [ ( [ arglist ] ) ] [ Astype ]

ÉlémentDescription
PublicFacultatif. Permet de déclarer des procédures disponibles pour toutes les autres procédures de tous les modules.
PrivateFacultatif. Permet de déclarer des procédures disponibles uniquement dans le module dans lequel la déclaration est effectuée.
PtrSafeObligatoire sur les versions 64 bits. Le mot clé PtrSafe confirme qu'il est possible d'exécuter une instruction Declare sur des versions 64 bits de Microsoft Office.
SubFacultatif ( Sub ou Function doivent apparaître). Indique que la procédure ne renvoie aucune valeur.
FunctionFacultatif ( Sub ou Function doivent apparaître). Indique que la procédure renvoie une valeur qui peut être utilisée dans une expression.
nameObligatoire. Nom de toute procédure valide. Notez que les points d'entrée DLL respectent la casse.
LibObligatoire. Indique qu'une DLL ou une ressource de code contient la procédure déclarée. La clause Lib est obligatoire pour toutes les déclarations.
libnameObligatoire. Nom de la DLL ou de la ressource de code qui contient la procédure déclarée.
AliasFacultatif. Indique que la procédure appelée porte un autre nom dans la DLL. Cela est utile lorsque le nom de la procédure externe est identique à un mot clé. Vous pouvez également utiliser Alias lorsqu'une procédure DLL porte le même nom qu'une variable ou une constante publique ou toute autre procédure figurant dans la même étendue. Alias est également utile si des caractères du nom de la procédure DLL ne sont pas autorisés par la convention d'affectation de noms à des DLL.
aliasnameFacultatif. Nom de la procédure de la DLL ou de la ressource de code. Si le premier caractère n'est pas un symbole de numéro ( # ), aliasname est le nom du point d'entrée de la procédure dans la DLL. Si ( # ) est le premier caractère, tous les caractères qui suivent doivent indiquer le nombre ordinal du point d'entrée de la procédure.
arglistFacultatif. Liste des variables représentant des arguments transmis à la procédure lorsqu'elle est appelée.
typeFacultatif. Type de données de la valeur renvoyée par une procédure Function. Il peut s'agir d'un des suivants : Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (non pris en charge actuellement), Date, String (longueur variable uniquement) ou Variant, un type défini par l'utilisateur ou un type d'objet. ( LongLong est un type déclaré valide uniquement sur les plateformes 64 bits.)

La syntaxe et les éléments de l'argument arglist sont les suivants :

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

ÉlémentDescription
OptionalFacultatif. Indique qu'un argument n'est pas obligatoire. S'il est utilisé, tous les arguments suivants dans arglist doivent également être facultatifs et déclarés à l'aide du mot clé Optional. Optional ne peut être utilisé pour aucun argument si ParamArray est utilisé.
ByValFacultatif. Indique que l'argument est transmis par valeur.
ByRefIndique que l'argument est transmis par référence. ByRef est la valeur par défaut dans Visual Basic.
ParamArrayFacultatif. Utilisé uniquement comme dernier argument dans arglist pour indiquer que l'argument final est un tableaufacultatif d'éléments Variant. Le mot clé ParamArray vous permet de fournir un nombre arbitraire d'arguments. Le mot clé ParamArray ne peut pas être utilisé avec ByVal, ByRef ou Optional.
varnameObligatoire. Nom de la variable représentant l'argument transmis à la procédure. Il suit les conventions standard d'attribution de noms aux variables.
( )Obligatoire pour les variables tableau. Indique que varname est un tableau.
typeFacultatif. Type de données de l'argument transmis à la procédure. Il peut s'agir d'un des suivants : Byte, Boolean, Integer, Long, LongLong, LongPtr, Currency, Single, Double, Decimal (non pris en charge actuellement), Date, String (longueur variable uniquement), Object, Variant, un type défini par l'utilisateur ou un type d'objet. ( LongLong est un type déclaré valide uniquement sur les plateformes 64 bits.)

Notes

Pour les procédures Function, le type de données de la procédure détermine le type de données qu'elle renvoie. Vous pouvez utiliser une clause As après arglist pour spécifier le type de retour de la fonction. Dans arglist , vous pouvez utiliser une clause As pour spécifier le type de données de tout argument transmis à la procédure. Non seulement vous pouvez spécifier un type de données standard quelconque, mais vous pouvez spécifier As Any dans arglist pour interdire la vérification du type et autoriser la transmission de tout type de données à la procédure.

Les parenthèses vides indiquent que la procédure Sub ou Function ne contient aucun argument et que Visual Basic doit vérifier qu'aucun argument n'est transmis. Dans l'exemple suivant, First ne prend aucun argument. Si vous utilisez des arguments dans un appel qui n'en accepte pas. Si vous utilisez des arguments dans un appel destiné à First, une erreur se produit :

Declare Sub First Lib "MyLib" ()

Si vous incluez une liste d'arguments, le nombre et le type des arguments sont vérifiés chaque fois que la procédure est appelée. Dans l'exemple suivant, la procédure prend un argument Long:

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

Remarque La liste d'arguments d'une instruction Declare ne peut contenir de chaînes de longueur fixe. Seules les chaînes de longueur variable peuvent être transmises à des procédures. Les chaînes de longueur fixe peuvent apparaître sous la forme d'arguments de procédure, mais elles sont converties en chaînes de longueur variable avant d'être transmises.

Remarque La constante vbNullString est utilisée lors de l'appel de procédures externes, lorsque la procédure externe exige une chaîne dont la valeur est nulle. Cela ne revient pas à une chaîne de longueur nulle ("").

Exemple

Cet exemple illustre comment l'instruction Declare est utilisée au niveau d'un module standard pour déclarer une référence à une procédure externe dans une bibliothèque de liens dynamiques (DLL). Vous pouvez placer les instructions Declare dans des modules de classe si les instructions Declare sont Private.

Remarque

' 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

© 2018 Microsoft