VBA
Voorwaardelijke compilatie
Zoeken…
Code gedrag veranderen tijdens het compileren
De richtlijn #Const
wordt gebruikt om een aangepaste preprocessorconstante te definiëren. Deze kunnen later door #If
worden gebruikt om te bepalen welke codeblokken worden gecompileerd en uitgevoerd.
#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
Dit heeft als resultaat dat de waarde van filepath
wordt ingesteld op "C:\Users\UserName\Path\To\File.txt"
. Het verwijderen van de #Const
lijn, of veranderen van het in #Const DEBUGMODE = 0
zou resulteren in de filepath
wordt ingesteld op "\\server\share\path\to\file.txt"
.
#Const Scope
De richtlijn #Const
is alleen effectief voor een enkel #Const
(module of klasse). Het moet worden gedeclareerd voor elk bestand waarin u uw aangepaste constante wilt gebruiken. U kunt ook een #Const
globaal voor uw project #Const
door naar Extra >> [Uw projectnaam] Projecteigenschappen te gaan. Hiermee wordt het dialoogvenster met projecteigenschappen geopend waarin we de constante aangifte invoeren. Typ in het vak "Voorwaardelijke compilatieargumenten" [constName] = [value]
. U kunt meer dan 1 constante invoeren door ze te scheiden met een dubbele punt, zoals [constName1] = [value1] : [constName2] = [value2]
.
Voorgedefinieerde constanten
Sommige compilatieconstanten zijn al vooraf gedefinieerd. Welke er bestaan, hangt af van de bitheid van de Office-versie waarin u VBA gebruikt. Merk op dat Vba7 werd geïntroduceerd naast Office 2010 ter ondersteuning van 64-bits versies van Office.
Constante | 16 bit | 32 bit | 64 bit |
---|---|---|---|
Vba6 | vals | Als Vba6 | vals |
Vba7 | vals | Als Vba7 | waar |
Win16 | waar | vals | vals |
Win32 | vals | waar | waar |
Win64 | vals | vals | waar |
Mac | vals | Als Mac | Als Mac |
Merk op dat Win64 / Win32 verwijzen naar de Office-versie, niet de Windows-versie. Bijvoorbeeld Win32 = WAAR in 32-bits Office, zelfs als het besturingssysteem een 64-bits versie van Windows is.
Gebruik aangifte importeren die op alle versies van Office werkt
#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
Dit kan een beetje worden vereenvoudigd, afhankelijk van welke versies van office u moet ondersteunen. Niet veel mensen ondersteunen bijvoorbeeld nog steeds 16-bits versies van Office. De laatste versie van 16 bit office was versie 4.3, uitgebracht in 1994 , dus de volgende verklaring is voldoende voor bijna alle moderne gevallen (inclusief 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
Als u niets ouder dan Office 2010 hoeft te ondersteunen, werkt deze verklaring prima.
' 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