Suche…


Ändern des Codeverhaltens zur Kompilierzeit

Die #Const Direktive wird verwendet, um eine benutzerdefinierte Präprozessorkonstante zu definieren. Diese können später von #If verwendet werden, #If zu steuern, welche Codeblöcke kompiliert und ausgeführt werden.

#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

Dies führt dazu, dass der filepath auf "C:\Users\UserName\Path\To\File.txt" . #Const Zeile #Const DEBUGMODE = 0 oder in #Const DEBUGMODE = 0 filepath wird der filepath auf "\\server\share\path\to\file.txt" .

#Const Scope

Die Direktive #Const ist nur für eine einzelne #Const (Modul oder Klasse) wirksam. Sie muss für jede einzelne Datei deklariert werden, in der Sie Ihre benutzerdefinierte Konstante verwenden möchten. Alternativ können Sie eine #Const für Ihr Projekt deklarieren, indem Sie auf Tools >> [Ihr Projektname] Projekteigenschaften klicken. Daraufhin wird das Dialogfeld Projekteigenschaften geöffnet, in das die Konstantendeklaration eingegeben wird. [constName] = [value] im Feld "Bedingte Kompilierungsargumente" [constName] = [value] . Sie können mehr als eine Konstante eingeben, indem Sie sie mit einem Doppelpunkt [constName1] = [value1] : [constName2] = [value2] , wie [constName1] = [value1] : [constName2] = [value2] .

VBA-Projekteigenschaften (Dialogfeld)

Vordefinierte Konstanten

Einige Kompilierungskonstanten sind bereits vordefiniert. Welche davon existieren, hängt von der Bitness der Office-Version ab, in der Sie VBA ausführen. Beachten Sie, dass Vba7 neben Office 2010 zur Unterstützung von 64-Bit-Versionen von Office eingeführt wurde.

Konstante 16 bit 32 bit 64 bit
Vba6 Falsch Wenn Vba6 Falsch
Vba7 Falsch Wenn Vba7 Wahr
Win16 Wahr Falsch Falsch
Win32 Falsch Wahr Wahr
Win64 Falsch Falsch Wahr
Mac Falsch Wenn Mac Wenn Mac

Beachten Sie, dass sich Win64 / Win32 auf die Office-Version und nicht auf die Windows-Version beziehen. Beispiel: Win32 = TRUE in 32-Bit-Office, auch wenn das Betriebssystem eine 64-Bit-Version von Windows ist.

Verwenden von Declare Importiert alle Office-Versionen

#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

Dies kann etwas vereinfacht werden, je nachdem, welche Office-Versionen Sie unterstützen müssen. Zum Beispiel unterstützen nicht viele Leute immer noch 16-Bit-Versionen von Office. Die letzte Version von 16 Bit Office war Version 4.3, die 1994 veröffentlicht wurde. Daher ist die folgende Erklärung für fast alle modernen Fälle (einschließlich Office 2007) ausreichend.

#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

Wenn Sie nichts älteres als Office 2010 unterstützen müssen, funktioniert diese Deklaration einwandfrei.

' 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow