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] .

VBA-projektegenskaper Dialog

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow