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

Okno dialogowe właściwości projektu VBA

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow