【问题标题】:Different languages issue when inserting formula from VBA从 VBA 插入公式时出现不同的语言问题
【发布时间】:2016-06-13 22:40:03
【问题描述】:

我理解正确吗,如果我使用类似的命令

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

如果在俄罗斯 Excel 上运行,我的宏将导致单元格中出现 #NAME? 错误。 我的意思是在这种情况下,上面的公式应该是硬编码的,比如

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

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

【问题讨论】:

    标签: vba excel regional-settings


    【解决方案1】:

    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)"
    

    【讨论】:

    • 那么,我对您的理解正确吗,使用 .FormulaLocal 将使我的代码绝对可行并且不依赖于语言系统?
    • 那我们为什么需要 .Formula 方法呢?))为什么不把 .FormulaLocal 的功能集成到 .Formula 方法中呢?))够奇怪的
    • 是的,应该。所需要做的就是确保您正确使用.FormulaLocal.FormulaR1C1Local。您的示例中的 R12 引用有点模棱两可;我希望我猜对了。此外,公式中的任何引号都需要加倍,因为它们将位于带引号的字符串中。例如="abc" 变为 .FormulaLocal = "=""abc"""
    • 如果您的 Office 安装是 RU-RU 或除 EN-US 以外的任何其他设备,则不会。但是,myRange.Formula = "=ROW(mySheet!$12:$12)" 适用于任何系统。 (不要使用Set 分配公式)
    • 谢谢,谢谢,谢谢。我为无法与Formula 一起工作而苦苦挣扎。我完全错过了它应该是"," 而不是";"。我通常在 VBA 调试器中查找值,但在一千年内我可以想象微软在 FormulaFormulaLocal 之间存在这种差异。我知道他们很奇怪,但是这很奇怪……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多