[英]Calling Worksheet functions from vba in foreign language versions of Excel
以下代碼 snipet 在英語版本的 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 的翻譯函數沒有機會將函數名稱翻譯為打開文檔時通常會這樣做。
有任何想法嗎?
是FormatConditions公式必須使用本地格式。
我的解決方法是將想要的公式寫入一個單元格,然后獲取該單元格的FormulaLocal ,它應該是您語言中的准確翻譯:
Dim tmpCell As Range
Set tmpCell = Range("IV1")
tmpCell.Formula = "=mod(row(),2)=0"
.FormatConditions.Add(xlExpression, Formula1:=tmpCell.FormulaLocal)
不知道是否有更清潔的解決方案,但如果有,我想知道,所以請分享...
我在另一個問題中找到了一個更清潔的解決方案:
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
Excel 2019 - 365 版本仍然存在此問題。 我發現在將 VBA 與 MS Excel 命名范圍管理器結合使用時會發生這種情況。
我面臨的錯誤示例,我修復了修改 Pragmateek 2013 年的答案。
在命名范圍管理器中存在一個使用 OFFSET 函數的命名范圍。 當調用此命名范圍並在 VBA 中使用它來設置另一個范圍變量時,使用 Application.Intersect 方法會導致對象錯誤,因為在 VBA 中,MS Excel 命名范圍是作為字符串獲取的。 然后 intersect 方法嘗試確定此字符串與另一個范圍的交集。 這當然會失敗,因為 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)
這工作得很好。 但是,如果有人有更清潔的解決方案,請發布建議。 干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.