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

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

VBA 非常以 EN-US 为中心。 VBA 的 .Formula 和 .FormulaR1C1 期望 ROW function。要使用区域语言功能“风味”,例如 СТРОКА,则应使用 Range.FormulaLocal property 或 Range.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 之间存在这种差异。我知道他们很奇怪,但是这很奇怪……

以上是关于从 VBA 插入公式时出现不同的语言问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Range 类在 VBA 中创建宏时出现运行时错误 1004

Access 2007,VBA:将 BLOB 插入链接表时出现奇怪的错误

将数据插入表时出现 ADODB VBA 自动化错误

在 MS Access (VBA) 中使用 ADODB 将非 ASCII 插入 MySQL 数据库时出现“不正确的字符串值”,但重试有效

使用 VBA 抓取时出现的问题 - VBA Web Scraping

如何在VBA中将变量插入公式