Я нахожу использование этой постоянной компилятора VBA7 по всему Интернету в отношении 64-битной совместимости с Office, но вопреки тому, что часто говорят, эта константа компилятора обнаруживает установки Office с использованием VBA7, например Office 2010 и выше., а не 64-битный офис.Если вам нужно определить, используете ли вы 64-разрядную версию приложения Office, вам нужно использовать Win64 константу!
Попробуйте это из 32- и 64-разрядных версий.Office, и вы можете понять, что я имею в виду:
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
Спасибо Стиву Риндсбергу за то, что я прямо сказал об этом!Стив также добавил:
Win64 фактически сообщает вам, является ли ваша версия приложения Office 64-разрядной.Если вам требуется поддержка более старых версий Office, вы можете захотеть объединить это с проверкой VBA7 для специальных версий вашего приложения Office, которые не будут понимать новые директивы компилятора.Но если ваш код не работает в 32-битной версии приложения Office, это может быть потому, что он попадает в директиву компилятора, обнаруживает, что да, у него есть VBA7, а затем пытается выполнить вызов 64-битного API, который не будетFly, потому что это 32-битный Office.
Так что это должен быть правильный подход для объединения VBA7 и 64-битной совместимости с Office:
#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