Recherche…


Modification du comportement du code au moment de la compilation

La directive #Const est utilisée pour définir une constante de préprocesseur personnalisée. Ceux-ci peuvent ensuite être utilisés par #If pour contrôler les blocs de code compilés et exécutés.

#Const DEBUGMODE = 1

#If DEBUGMODE Then
    Const filepath As String = "C:\Users\UserName\Path\To\File.txt"
#Else
    Const filepath As String = "\\server\share\path\to\file.txt"
#End If

Cela se traduit par la valeur de filepath définie sur "C:\Users\UserName\Path\To\File.txt" . La suppression de la ligne #Const ou son #Const DEBUGMODE = 0 par #Const DEBUGMODE = 0 entraînerait la filepath du filepath au filepath "\\server\share\path\to\file.txt" .

#Const Scope

La directive #Const n'est efficace que pour un seul fichier de code (module ou classe). Il doit être déclaré pour chaque fichier que vous souhaitez utiliser avec votre constante personnalisée. Vous pouvez également déclarer un #Const globalement pour votre projet en allant dans Outils >> [Nom de votre projet] Propriétés du projet. Cela fera apparaître la boîte de dialogue des propriétés du projet dans laquelle nous entrerons la déclaration de la constante. Dans la zone «Arguments de compilation conditionnelle», tapez [constName] = [value] . Vous pouvez entrer plus d'une constante en les séparant par deux points, comme [constName1] = [value1] : [constName2] = [value2] .

Boîte de dialogue Propriétés du projet VBA

Constantes prédéfinies

Certaines constantes de compilation sont déjà prédéfinies. Les versions existantes dépendront de la qualité de la version bureautique dans laquelle vous exécutez VBA. Notez que Vba7 a été introduit avec Office 2010 pour prendre en charge les versions 64 bits d'Office.

Constant 16 bits 32 bits 64 bits
Vba6 Faux Si vba6 Faux
Vba7 Faux Si vba7 Vrai
Win16 Vrai Faux Faux
Win32 Faux Vrai Vrai
Win64 Faux Faux Vrai
Mac Faux Si mac Si mac

Notez que Win64 / Win32 fait référence à la version d'Office, pas à la version de Windows. Par exemple, Win32 = TRUE dans Office 32 bits, même si le système d'exploitation est une version 64 bits de Windows.

Utilisation des déclarations de déclaration qui fonctionnent sur toutes les versions d'Office

#If Vba7 Then
    ' It's important to check for Win64 first, 
    ' because Win32 will also return true when Win64 does.

    #If Win64 Then
        Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
    #Else
        Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
    #End If
#Else 
    ' Must be Vba6, the PtrSafe keyword didn't exist back then,
    ' so we need to declare Win32 imports a bit differently than above.

    #If Win32 Then
        Declare Function GetFoo Lib "exampleLib32"() As Long
    #Else
        Declare Function GetFoo Lib "exampleLib"() As Integer
    #End If
#End If

Cela peut être simplifié un peu en fonction des versions de bureau à prendre en charge. Par exemple, peu de personnes prennent en charge les versions 16 bits d'Office. La dernière version de bureau 16 bits était la version 4.3, publiée en 1994. La déclaration suivante est donc suffisante pour presque tous les cas modernes (y compris Office 2007).

#If Vba7 Then
    ' It's important to check for Win64 first, 
    ' because Win32 will also return true when Win64 does.

    #If Win64 Then
        Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
    #Else
        Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
    #End If
#Else 
    ' Must be Vba6. We don't support 16 bit office, so must be Win32. 

    Declare Function GetFoo Lib "exampleLib32"() As Long
#End If

Si vous n'êtes pas obligé de prendre en charge une version antérieure à Office 2010, cette déclaration fonctionne correctement.

' We only have 2010 installs, so we already know we have Vba7.

#If Win64 Then
    Declare PtrSafe Function GetFoo64 Lib "exampleLib32" () As LongLong
#Else
    Declare PtrSafe Function GetFoo Lib "exampleLib32" () As Long
#End If


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow