VBA
Kompilacja warunkowa
Szukaj…
Zmiana zachowania kodu w czasie kompilacji
Dyrektywa #Const
służy do definiowania niestandardowej stałej preprocesora. Mogą one być później wykorzystane przez #If
do kontrolowania, które bloki kodu są kompilowane i wykonywane.
#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
Prowadzi to do wartości filepath
ustawiony jest na "C:\Users\UserName\Path\To\File.txt"
. Zdejmowanie #Const
linię, lub zmieniając go do #Const DEBUGMODE = 0
spowodowałoby filepath
będąc ustawionym na "\\server\share\path\to\file.txt"
.
#Const Zakres
Dyrektywa #Const
obowiązuje tylko dla jednego pliku kodu (modułu lub klasy). Musi być zadeklarowany dla każdego pliku, w którym chcesz użyć stałej niestandardowej. Alternatywnie możesz zadeklarować #Const
globalnie dla swojego projektu, przechodząc do Narzędzia >> [Nazwa twojego projektu] Właściwości projektu. Spowoduje to wyświetlenie okna dialogowego właściwości projektu, w którym wprowadzimy stałą deklarację. W polu „Argumenty kompilacji warunkowej” wpisz [constName] = [value]
. Możesz wprowadzić więcej niż 1 stałą, oddzielając je dwukropkiem, na przykład [constName1] = [value1] : [constName2] = [value2]
.
Predefiniowane stałe
Niektóre stałe kompilacji są już wstępnie zdefiniowane. Te, które istnieją, będą zależeć od bitowej wersji pakietu Office, w której używasz VBA. Pamiętaj, że Vba7 został wprowadzony wraz z pakietem Office 2010 do obsługi 64-bitowych wersji pakietu Office.
Stały | 16 bitów | 32-bitowy | 64-bitowy |
---|---|---|---|
Vba6 | Fałszywy | Jeśli Vba6 | Fałszywy |
Vba7 | Fałszywy | Jeśli Vba7 | Prawdziwe |
Win16 | Prawdziwe | Fałszywy | Fałszywy |
Win32 | Fałszywy | Prawdziwe | Prawdziwe |
Win64 | Fałszywy | Fałszywy | Prawdziwe |
Prochowiec | Fałszywy | Jeśli Mac | Jeśli Mac |
Należy pamiętać, że Win64 / Win32 odnosi się do wersji pakietu Office, a nie wersji systemu Windows. Na przykład Win32 = PRAWDA w 32-bitowym pakiecie Office, nawet jeśli system operacyjny jest 64-bitową wersją systemu Windows.
Korzystanie z deklaracji importów, które działają we wszystkich wersjach pakietu 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
Można to nieco uprościć w zależności od obsługiwanych wersji pakietu Office. Na przykład niewiele osób nadal obsługuje 16-bitowe wersje pakietu Office. Ostatnią wersją 16-bitowego pakietu Office była wersja 4.3, wydana w 1994 roku , więc następująca deklaracja jest wystarczająca dla prawie wszystkich współczesnych przypadków (w tym 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
Jeśli nie musisz obsługiwać niczego starszego niż Office 2010, ta deklaracja działa dobrze.
' 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