Excelmacros,在运行时插入国际有效的公式

我有一个Excel电子表格,有一个macros插入一个条件格式,如下所示:

Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=UND($A3=""" & lastName & """; $B3=""" & firstName & """)" 

正如你所看到的,我已经使用了德语的“AND”(即“UND”)公式,很显然,这个代码在我用法文或英文版的Excel的时候不会工作。 通常公式是自动本地化的,但是如何在运行时插入一个可以在所有版本上运行的公式?

好的,谢谢你帮助我,你帮我破解了这个。

用英文确实是不可能的。 当使用公式进行操作时,可以使用英语。 通过设置编码Range("A1").formula="AND(TRUE)" ,但这不适用于FormatConditions

我的解决scheme是一个函数,将公式暂时写入单元格,通过FormulaLocal属性读取它,然后返回本地化公式,如下所示:

 Function GetLocalizedFormula(formula As String) ' returns the English formula from the parameter in the local format Dim temporary As String temporary = Range("A1").formula Range("A1").formula = formula Dim result As String result = Range("A1").FormulaLocal Range("A1").formula = temporary GetLocalizedFormula = result End Function 

返回的公式可以在FormatConditions上使用,在稍后在不同语言版本的Excel上打开文档时,将重新进行本地化或取消本地化。

将公式(一个简单的版本)存储在工作簿的(隐藏)单元格中。

然后当你打开工作簿时,该公式将被excel自动翻译为用户。

现在你只需要在你的脚本中剖析这个公式(find左括号“(”

使用类似于:

strLocalizedFormula = Mid(strYourFormula, 2, InStr(1, strYourFormula, "(") - 2)

strYourFormula将从您的工作表中的公式副本。

我希望这只是因为我只使用英语环境。

另外从阅读这个: http : //vantedbits.blogspot.nl/2010/10/excel-vba-tip-translate-formulas.html我想你应该(只)能够使用英文版的单元格公式VBA。

也许试试这个(未经testing,因为我只有英文版insatlled)

使用Range.Formula ,将公式的国际版本写入单元格。 然后从Range.FormulaLocal读取,并将该string写入FormatConditions

我只是在德语Excel论坛中find了一个非常优雅的解决scheme 。 这不会写入虚拟单元格,而是使用临时命名范围 。 我用原来的想法(credit to bst)为两个方向写一个翻译函数。

将本地化公式转换为英文公式:

 Public Function TranslateFormula_LocalToGeneric(ByVal iFormula As String) As String Names.Add "temporaryFormula", RefersToLocal:=iFormula TranslateFormula_LocalToGeneric = Names("temporaryFormula").RefersTo Names("temporaryFormula").Delete End Function 

将英文公式转换为本地化公式:

 Public Function TranslateFormula_GenericToLocal(ByVal iFormula As String) As String Names.Add "temporaryFormula", RefersTo:=iFormula TranslateFormula_GenericToLocal = Names("temporaryFormula").RefersToLocal Names("temporaryFormula").Delete End Function 

这是非常方便的,如果你需要处理条件格式的公式,因为这些公式总是作为本地化公式存储(但你可能需要它们的通用版本,例如使用Application.Evaluate(genericFormula) )。

感谢大家! 我发现这个post非常有用。

我的解决scheme是其他人的组合,我添加它,以防有人发现它有用。

 Dim tempform As String Dim strlocalform1 As String Dim strlocalform2 As String ' Get formula stored in WorksheetA Cell O1 =IFERROR(a,b) tempform = Worksheets("Sheet").Range("O1").Formula ' Extract from the formula IFERROR statement in local language. strlocalform1 = Mid(tempform, 2, InStr(1, tempform, "(") - 1) ' Extract from the formula separator , (comma) in local settings. strlocalform2 = Mid(tempform, InStr(1, tempform, "a") + 1, 1) ' Add formula in local language to desired field. pvt.CalculatedFields.Add Name:="NewField", Formula:="=" & strlocalform1 & "FORMULA" & strlocalform2 & ")" 

希望这可以帮助!