Ricerca…


Modifica del comportamento del codice in fase di compilazione

La direttiva #Const viene utilizzata per definire una costante del preprocessore personalizzata. Questi possono essere successivamente utilizzati da #If per controllare quali blocchi di codice vengono compilati ed eseguiti.

#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

Ciò si traduce nel valore di filepath impostato su "C:\Users\UserName\Path\To\File.txt" . La rimozione della riga #Const o la modifica di #Const DEBUGMODE = 0 comportano l'impostazione del filepath su "\\server\share\path\to\file.txt" .

#Const Scope

La direttiva #Const è efficace solo per un singolo file di codice (modulo o classe). Deve essere dichiarato per ogni file in cui desideri utilizzare la costante personalizzata. In alternativa, puoi dichiarare un #Const globalmente per il tuo progetto andando su Strumenti >> Proprietà del progetto [Nome del tuo progetto]. Questo farà apparire la finestra di dialogo delle proprietà del progetto dove inseriremo la dichiarazione costante. Nella casella "Argomenti di compilazione condizionale", digitare [constName] = [value] . Puoi inserire più di una costante separandole con due punti, come [constName1] = [value1] : [constName2] = [value2] .

Finestra di dialogo delle proprietà del progetto VBA

Costanti predefinite

Alcune costanti di compilazione sono già predefinite. Quelli esistenti dipenderanno dalla versione della versione di Office in cui VBA è in esecuzione. Si noti che Vba7 è stato introdotto insieme a Office 2010 per supportare le versioni a 64 bit di Office.

Costante 16 bit 32 bit 64 bit
VBA6 falso Se Vba6 falso
Vba7 falso Se Vba7 Vero
Win16 Vero falso falso
Win32 falso Vero Vero
Win64 falso falso Vero
Mac falso Se Mac Se Mac

Si noti che Win64 / Win32 si riferisce alla versione di Office, non alla versione di Windows. Ad esempio Win32 = TRUE in Office a 32 bit, anche se il sistema operativo è una versione a 64 bit di Windows.

Utilizzo di Declare Imports che funzionano su tutte le versioni di 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

Questo può essere semplificato un po 'a seconda delle versioni di ufficio che è necessario supportare. Ad esempio, non molte persone stanno ancora supportando le versioni a 16 bit di Office. L'ultima versione di Office 16 bit era la versione 4.3, rilasciata nel 1994 , quindi la seguente dichiarazione è sufficiente per quasi tutti i casi moderni (incluso 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

Se non è necessario supportare elementi precedenti a Office 2010, questa dichiarazione funziona correttamente.

' 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow