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
