Je trouve que l'utilisation de ce VBA7 Une constante du compilateur est mentionnée partout sur Internet en relation avec la compatibilité d'Office 64 bits, mais contrairement à ce qui est souvent dit, cette constante du compilateur détecte les installations d'Office utilisant VBA7, par exemple à partir d'Office 2010, et non Office 64 bits. Ce qui est déroutant, c'est que si vous avez besoin de déterminer si vous utilisez la version 64 bits de l'application Office, vous devez utiliser la fonction Win64 constant !
Essayez ceci sur les versions 32 et 64 bits d'Office et vous verrez ce que je veux dire :
Sub DemoCompilerConstants()
#If VBA7 Then
MsgBox "VBA7"
#Else
MsgBox "Not VBA7"
#End If
#If Win64 Then
MsgBox "Win64"
#Else
MsgBox "NOT Win64"
#End If
End Sub
Merci à Steve Rindsberg pour m'avoir éclairé sur ce point ! Steve a également ajouté :
Win64 vous indique si la version de votre application Office est 64 bits ou non. est 64 bits. Si vous devez prendre en charge d'anciennes versions d'Office, vous pouvez combiner cela avec une vérification VBA7 pour les cas spéciaux. de votre application Office qui ne comprendrait pas les nouvelles directives du compilateur. compilateur. Mais si votre code échoue sur une version 32 bits de l'application de l'application Office, il se peut que ce soit parce qu'il rencontre la directive compilateur, qu'il trouve que oui, il y a VBA7 et qu'il essaie d'exécuter l'appel API l'appel de l'API 64 bits, ce qui ne fonctionnera pas car il s'agit d'une application Office 32 bits.
Cela devrait donc être l'approche correcte pour combiner VBA7 et la compatibilité avec Office 64 bits :
#If VBA7 Then
#If Win64 Then ' Declare using PtrSafe for Office 64 bit
Declare PtrSafe Function ....
#Else ' Declare for Office 32 bit
Declare Function ....
#End If
#Else ' Declare for Office 32 bit
Declare Function ....
#End If