在Excel外语版本中,如何从VBA调用工作表函数

3
以下代码在英文版的Excel中可以正常运行,但如果尝试在同一个工作簿中的葡萄牙语版Excel中运行此代码,则会出现错误。
   ' Add color bars on every other row - attempt to make list
   ' easier to read.
   ' "PlaceAt" is a worksheet range passed into the function
    With Range(PlaceAt.offset(1, 0), PlaceAt.offset(i + 1, 7))
        .FormatConditions.Add Type:=xlExpression, Formula1:="=MOD(ROW(),2)=1"
        .FormatConditions(1).Interior.ColorIndex = 20
    End With

我认为问题在于,在葡萄牙语中,ROW函数的拼写为LIN(不确定MOD函数的拼写),因为该函数是使用VBA插入的,Excel的翻译功能没有机会像正常情况下打开文档时那样翻译函数名称。有什么想法吗?
3个回答

2

是的,FormatConditions 公式必须使用本地格式

我的解决方法是将所需公式写入单元格,然后获取该单元格的 FormulaLocal,这应该是您语言中的确切翻译:

Dim tmpCell As Range
Set tmpCell = Range("IV1")
tmpCell.Formula = "=mod(row(),2)=0"

.FormatConditions.Add(xlExpression, Formula1:=tmpCell.FormulaLocal)

不知道是否存在更为简洁的解决方案,但如果有的话,我想知道,请分享...


谢谢您的回复。我向巴西的一位同事发送了一些示例代码。等我听到回信后会跟进。 - David Showalter
此时他可能正在海滩上 ;) - Pragmateek

1

我在另一个问题中找到了更简洁的解决方案

Names.Add "translate", RefersTo:="=MOD(ROW(),2)=1"                                 ' Generic separator (,) and function name (ROW).
.FormatConditions.Add Type:=xlExpression, Formula1:=Names("translate").RefersToLocal ' Local separator (;) and function name (LIN).
Names("translate").Delete

0

Excel 2019 - 365版本仍然存在这个问题。我发现在使用VBA与MS Excel命名范围管理器同时使用时会出现这个问题。

我遇到的错误示例,我通过修改Pragmateek的2013年答案来解决它。

在命名范围管理器中存在一个使用OFFSET函数的命名范围。当调用此命名范围并在VBA中使用Application.Intersect方法将其设置为另一个范围变量时,由于在VBA中获取MS Excel命名范围为字符串,因此会导致对象错误。然后,交集方法尝试确定此字符串和另一个范围的交集。当然,由于OFFSET在英语MS Excel版本中有效,但在葡萄牙语/西班牙语等其他语言中无效,因此会失败。

修复这个问题需要:

' Names!XXXXX = "=OFFSET('DummySheet'!$AO$7,0,0,1,'DummySheet'!$AM$2)""

Sub evaluate()
...
xAxis = Names!XXXXXX

Dim tempvar As Range: Set tempvar = Range("C1")
tempvar.Formula = xAxis                 ' set the range to hold the formula
tempvar.Formula = tempvar.FormulaLocal  ' set the range to hold the formula in the local language
Set rng = Application.Intersect(tempvar.EntireColumn, yAxis.RefersToRange.EntireRow)

这个方法很有效。但是如果有更简洁的解决方案,请发表建议。谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接