VBA
Compilation conditionnelle
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]
.
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