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

Dialoogvenster VBA-projecteigenschappen

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow