我正在尝试实现Microsoft所称的最佳实践,但无济于事。这是由于Excel中新支持的动态数组。以下是他们的文章和具体部分。HERE
我在Excel中创建了宏,旧版本的Excel中都可以正常工作,但是一旦新版本被引入,公式会发生变化,因为它依赖于以前的默认值“隐式交叉点评估(IIE)”。由于较新版本的Excel中已经废弃了旧方法,所有VBA实现都依赖于旧方法,新版本的Excel将隐式交叉点运算符@添加到公式中。由于这可能会破坏复杂的工作表,我希望能够检测当前版本的Excel是否支持动态数组,如果支持,则希望能够将所有
如何在VBA中检测版本(Pre DA或Post DA)?最佳实践
如果针对Excel的DA版本,请优先使用Range.Formula2而不是Range.Formula。
如果针对Excel的Pre和Post DA版本,请继续使用Range.Formula。但是,如果您想要严格控制公式在用户公式栏中的外观,则应检测是否支持.Formula2,如果支持,则使用.Formula2,否则使用.Formula
我在Excel中创建了宏,旧版本的Excel中都可以正常工作,但是一旦新版本被引入,公式会发生变化,因为它依赖于以前的默认值“隐式交叉点评估(IIE)”。由于较新版本的Excel中已经废弃了旧方法,所有VBA实现都依赖于旧方法,新版本的Excel将隐式交叉点运算符@添加到公式中。由于这可能会破坏复杂的工作表,我希望能够检测当前版本的Excel是否支持动态数组,如果支持,则希望能够将所有
range.formula
的实现替换为range.formula2
。‘Detect Pre or Post DA version
Dim ExcelVersion As Variant
ExcelVersion = blabla bla test ‘Some test function HERE, return vbTrue if Post DA Version Enabled
If ExcelVersion = vbTure Then
Range.Formula2 = "=CustomFunction("& variable & ")"
Else
Range.Formula = "=CustomFunction("& variable & ")"
End If
*以上使用vbTrue作为示例,它可以是任何东西,同样适用于“变量”
.formula2
? - Ben