【问题标题】:Conditional compilation based on Excel version基于Excel版本的条件编译
【发布时间】:2013-01-29 10:39:05
【问题描述】:

我知道我可以在 VBA 中使用条件编译来区分 64 位和 32 位版本(使用 #If VBA7 Then ...)。

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

另外,是否有可用的现有编译器常量列表?到目前为止,我找到了 VBA7Win64(例如来自 this 文章)——但还有其他的吗?

【问题讨论】:

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

标签: excel vba compilation excel-2010 excel-2013


【解决方案1】:

this link,你有以下常量:

VBA6
VBA7
Win64
Win32
Win16
Mac

【讨论】:

    【解决方案2】:

    不是问题的版本粒度,但我需要将 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 及以下评估#If 为真/假,XL16 为真/真。如果只是#If VBA7,XL14 会尝试编译XL16 代码。我不知道为什么,但它就是这样测试的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2014-05-10
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      相关资源
      最近更新 更多