VBA
Bedingte Kompilierung
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]
.
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