VBA
Compilazione condizionale
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]
.
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