VBA
Villkorlig sammanställning
Sök…
Ändra kodbeteende vid sammanställningstiden
Direktivet #Const
används för att definiera en anpassad preprocessorkonstant. Dessa kan senare användas av #If
att kontrollera vilka kodblock som kompileras och körs.
#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
Detta resulterar i att värdet på filepath
är inställt på "C:\Users\UserName\Path\To\File.txt"
. Att ta bort #Const
raden eller ändra den till #Const DEBUGMODE = 0
skulle leda till att filepath
är inställd på "\\server\share\path\to\file.txt"
.
#Const Scope
Direktivet #Const
är endast effektivt för en enda kodfil (modul eller klass). Det måste deklareras för varje fil du vill använda din anpassade konstant i. Alternativt kan du förklara ett #Const
globalt för ditt projekt genom att gå till Verktyg >> [Ditt projektnamn] Projektegenskaper. Detta kommer att öppna dialogrutan för projektegenskaper där vi anger den ständiga deklarationen. [constName] = [value]
rutan "Villkorlig sammanställningsargument". Du kan ange mer än 1 konstant genom att separera dem med en kolon, som [constName1] = [value1] : [constName2] = [value2]
.
Fördefinierade konstanter
Vissa sammanställningskonstanter är redan fördefinierade. Vilka som finns kommer att bero på bitheten i den kontorsversion du kör VBA i. Observera att Vba7 introducerades tillsammans med Office 2010 för att stödja 64-bitarsversioner av Office.
Konstant | 16 bitar | 32 bitar | 64 bitar |
---|---|---|---|
Vba6 | Falsk | Om Vba6 | Falsk |
Vba7 | Falsk | Om Vba7 | Sann |
Win16 | Sann | Falsk | Falsk |
Win32 | Falsk | Sann | Sann |
Win64 | Falsk | Falsk | Sann |
Mac | Falsk | Om Mac | Om Mac |
Observera att Win64 / Win32 hänvisar till Office-versionen, inte Windows-versionen. Till exempel Win32 = TRUE i 32-bitars Office, även om operativsystemet är en 64-bitarsversion av Windows.
Använda Deklarera import som fungerar på alla versioner av 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
Detta kan förenklas lite beroende på vilka versioner av kontoret du behöver stödja. Till exempel stöder inte många människor fortfarande 16-bitarsversioner av Office. Den sista versionen av 16-bitars office var version 4.3, släpptes 1994 , så följande förklaring är tillräcklig för nästan alla moderna fall (inklusive 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
Om du inte behöver stödja något som är äldre än Office 2010 fungerar den här förklaringen bara bra.
' 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