从 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 调试器中查找值,但在一千年内我可以想象微软在 Formula
和 FormulaLocal
之间存在这种差异。我知道他们很奇怪,但是这很奇怪……以上是关于从 VBA 插入公式时出现不同的语言问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 Range 类在 VBA 中创建宏时出现运行时错误 1004
Access 2007,VBA:将 BLOB 插入链接表时出现奇怪的错误
在 MS Access (VBA) 中使用 ADODB 将非 ASCII 插入 MySQL 数据库时出现“不正确的字符串值”,但重试有效