从VBA

时间:2016-03-01 13:24:42

标签: excel vba excel-vba regional-settings

我是否理解正确,如果我使用像

这样的命令
Set myRange.formula = “=ROW(mySheet!R12)” 

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

一样硬编码
Set myRange.formula = “=СТРОКА(mySheet!R12)”

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

1 个答案:

答案 0 :(得分:13)

VBA非常以EN-US为中心。 VBA的.Formula.FormulaR1C1期待ROW function。要使用СТРОКА等区域语言功能“风味”,则应使用Range.FormulaLocal propertyRange.FormulaR1C1Local property代替。

列表分隔符也是如此。无论系统区域设置如何,在使用.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)"