首页 > 解决方案 > VBA - 添加 ConditionalFormatting 时出现运行时错误 5

问题描述

在我的 VBA 应用程序中,我使用了一些条件格式。当我将系统小数更改为 Comma(,) 而不是 Dot(.) 时。它开始给我

“运行时错误 5 - 无效的过程调用或参数”

在添加格式条件的行

MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1.

下面的代码..

Private Sub Worksheet_Change(ByVal Target As Range)
 With ThisWorkbook.Sheets("financeSheet")        
        Application.EnableEvents = False
        Application.UseSystemSeparators = True
       
        Dim MyRange As Range
        Set MyRange = ThisWorkbook.Sheets("financeSheet").Range(Target.Address)

        formula_1 = "=IF(OR($AV" & Target.Cells.row & "=""No"",AND($AV" & Target.Cells.row & "=""Yes"")),IF(Y" & Target.Cells.row & "=AJ" & Target.Cells.row & ",FALSE,TRUE),FALSE)"

        MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1
    End With
  End Sub

在通常的系统设置为 Dot(.) 时,我工作得很好。请帮忙修复

标签: excelvbaexcel-formula

解决方案


当您使用 VBA 在单元格中编写公式时,您可以选择:您可以使用该属性formula来编写与语言无关的公式 - 对于 Excel,这意味着您以美式英语形式编写它,使用逗号作为参数分隔符和所有函数的英文名称。这适用于您的计算机和 Excel 运行的语言和区域设置。
如果出于任何原因您想使用当前的区域和语言设置来编写公式,您可以使用属性FormulaLocal.

事实证明,当您将公式写入条件格式时,您别无选择,您需要使用本地设置来指定它。在您的情况下,您可能需要将参数分隔符从 更改","";"。尝试

formula_1 = Replace(formula_1, ",", Application.International(xlListSeparator))

但是,如果您想确保您的公式也能在世界各地的同事或朋友的计算机上正确创建,最好的办法可能是将公式的(英文)版本写入工作表某处的单元格中这是不可见的并读取该formulaLocal单元格的 -property 以获取翻译后的公式。

请注意,只要您使用正确的 listSeparator,Excel 将接受带有英文函数名称的公式(或任何名称,您可以键入Blablabla),但是,当您以不同的语言运行时,它不会触发。

但是,如果您使用正确的条件格式公式创建工作表,保存此工作簿并使用以不同语言运行的 Excel 将其打开,则公式将自动翻译并继续工作。


推荐阅读