从VBA插入公式时出现不同的语言问题

Different languages issue when inserting formula from VBA

提问人:Edgar Navasardyan 提问时间:3/1/2016 最后编辑:newishuserEdgar Navasardyan 更新时间:5/6/2016 访问量:11972

问:

我是否正确理解,如果我使用像这样的命令

Set myRange.formula = “=ROW(mySheet!R12)” 

如果我的宏在俄语 Excel 上运行,它会导致单元格中出现错误。 我的意思是,在这种情况下,上面的公式应该像#NAME?

Set myRange.formula = “=СТРОКА(mySheet!R12)”

其中 СТРОКА 是 SUM 函数的俄语类似物。我不认为 Excel 足够聪明,可以在运行时翻译公式。 那么有什么方法可以解决这个问题,最重要的是,什么是最通用的代码可以使宏正常工作,而不管语言如何?

VBA Excel 区域设置

评论


答:

22赞 user4039065 3/1/2016 #1

VBA 非常以 EN-US 为中心。VBA 的 .公式.FormulaR1C1 需要 ROW 函数。若要使用区域语言函数“风格”(如 СТРОКА),则应改用 Range.FormulaLocal 属性或 Range.FormulaR1C1Local 属性

这同样适用于列表分隔符。使用 时,使用逗号(例如 )分隔函数中的参数。Formula 或 .FormulaR1C1 与系统区域设置无关。如果您的系统使用分号(例如 )作为列表分隔符,则只能与 一起使用。FormulaLocal 或 .FormulaR1C1Local。,;

工作表上的结果将正确反映 Office 安装的语言设置。

myRange.Formula = "=ROW(mySheet!$12:$12)"
myRange.FormulaR1C1 = "=ROW(mySheet!R12)"
myRange.FormulaLocal  = "=СТРОКА(mySheet!$12:$12)"
myRange.FormulaR1C1Local= "=СТРОКА(mySheet!R12)"

评论

0赞 Edgar Navasardyan 3/1/2016
所以,我是否正确地理解了你,使用 .FormulaLocal 将使我的代码绝对可行,并且不依赖于语言系统?
0赞 Edgar Navasardyan 3/1/2016
那我们为什么需要这个方法呢?公式是什么?他们为什么不整合 .FormulaLocal 添加到方法中。公式 ?够奇怪的
0赞 3/1/2016
是的,它应该。所需要做的就是确保您使用的是 .FormulaLocal.FormulaR1C1Local 适当地。样本中的参考文献有点模棱两可;我希望我猜对了。此外,公式中的任何引号都需要加倍,因为它们将位于带引号的字符串中。例如 成为。R12="abc".FormulaLocal = "=""abc"""
3赞 3/1/2016
如果您的 Office 安装是 RU-RU 或 EN-US 以外的任何安装,则不会。但是,适用于任何系统。(不要用于分配公式)myRange.Formula = "=ROW(mySheet!$12:$12)"Set
1赞 244an 11/29/2017
谢谢,谢谢,谢谢。我一直在为无法使用它而苦苦挣扎.我完全错过了它应该而不是.我通常在 VBA 调试器中查找值,但在一千年后我无法想象 Microsoft 在 和 之间有这种差异。我知道他们很奇怪,但这个奇怪的......Formula","";"FormulaFormulaLocal