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 的翻译函数没有机会将函数名称翻译为它通常会在打开文档时。

有任何想法吗?

4

3 回答 3

2

FormatConditions公式必须使用本地格式

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

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

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

不知道是否有更清洁的解决方案,但如果有,我想知道,所以请分享...

于 2013-06-05T19:39:49.643 回答
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
于 2020-04-20T11:48:04.040 回答
0

Excel 2019 - 365 版本仍然存在此问题。我发现它是在将 VBA 与 MS Excel 命名范围管理器结合使用时发生的。

我面临的错误示例,我修复了修改 Pragmateek 2013 年的答案。

在命名范围管理器中存在一个使用偏移函数的命名范围。当调用此命名范围并在 VBA 中使用它设置另一个范围变量时,使用 Application.Intersect 方法会导致对象错误,因为在 VBA 中,MS Excel 命名范围是作为字符串获取的。intersect 方法然后尝试确定该字符串与另一个范围的相交。这当然会失败,因为 OF​​FSET 在英语 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)

这运作良好。但是,如果有人有更清洁的解决方案,请发表建议。干杯!

于 2019-11-20T22:28:54.843 回答