基于Excel版本的条件编译

基于Excel版本的条件编译,excel,vba,compilation,excel-2010,excel-2013,Excel,Vba,Compilation,Excel 2010,Excel 2013,我知道我可以在VBA中使用条件编译来区分64位和32位版本(使用#如果是VBA7,那么…) 是否还有一个类似于Application.Version的内置常量,以便区分Excel 2013/2010/2007/。。。等等,在编译时 另外,是否有可用的现有编译器常量列表?到目前为止,我发现了VBA7和Win64(例如,从文章中)-但是还有其他的吗?从中,您有以下常量: VBA6 VBA7 Win64 Win32 Win16 Mac 没有对版本粒度提出质疑,但我需要将Office 365/XL16

我知道我可以在VBA中使用条件编译来区分64位和32位版本(使用
#如果是VBA7,那么…

是否还有一个类似于
Application.Version
的内置常量,以便区分Excel 2013/2010/2007/。。。等等,在编译时

另外,是否有可用的现有编译器常量列表?到目前为止,我发现了
VBA7
Win64
(例如,从文章中)-但是还有其他的吗?

从中,您有以下常量:

VBA6
VBA7
Win64
Win32
Win16
Mac

没有对版本粒度提出质疑,但我需要将Office 365/XL16特定的代码与其前身分开。VBA7与VBA6向后兼容,VBA6对VBA7一无所知。我们可以利用这个优势

Sub testit()
#If VBA6 And VBA7 Then
   Debug.Print "Cool!" 'XL16 vba code
#Else
   Debug.Print "Yeah!" 'Not XL16 vba code
#End If
End Sub

XL14及以下值的评估#如果为真/假,XL16为真/真。如果只是#如果是VBA7,XL14会尝试编译XL16代码。我不知道为什么,但它就是这样测试的。

我不知道有任何内置常量-标准方法是使用
Val(Application.Version)
可惜它不能在编译时分解。但我想这就是它的方式…VBA7常量不会告诉您是否正在使用64位应用程序。它告诉您是否正在使用至少VBA7(可能是32位或64位应用程序)。Win64常量告诉您是否正在使用64位应用程序。