首页 > 解决方案 > 条件格式在 VBA 中出现错误

问题描述

我有一个来自 VBA 代码的条件格式,用于在值发生变化时适用的列。

该列实际上是一个价格列,所以当输入价格值时,我会根据一些公式应用我的条件。当小数点分隔符为“。”时它正在工作。(点)(例如:1.323)

但是当系统设置中小数分隔符为“,”时。添加条件格式的公式时出现错误..

**

**

   Dim MyRange As Range
    Set MyRange =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)"
    formula_2 = "=0"
    formula_3 = "=IF($N" & Target.Cells.row & "=""EUR"",TRUE,FALSE)"
    
    MyRange.Interior.Color = RGB(250, 191, 143)
    MyRange.FormatConditions.Delete
    MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1
    MyRange.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=formula_2
    MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_3
    
    MyRange.FormatConditions(1).Interior.Color = RGB(255, 192, 0)
    MyRange.FormatConditions(1).SetFirstPriority
    MyRange.FormatConditions(1).StopIfTrue = False
    
    MyRange.FormatConditions(2).StopIfTrue = True
    MyRange.FormatConditions(2).NumberFormat = "##0.00"

    MyRange.FormatConditions(3).StopIfTrue = True
    MyRange.FormatConditions(3).NumberFormat = "[$EUR] #,##0.0000"
    

在此处输入图像描述

行中触发 "MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1" 错误错误代码:5

标签: vba

解决方案


我认为这不是关于小数点分隔符而是关于列表分隔符。除其他外,此分隔符用作函数参数的分隔符。

常规(单元格)公式总是翻译成美国版本。如果您在使用列表分隔符 = ";" 的系统上工作 并在单元格中输入公式=OR(A1=1;B1=2),在 VBA 中你会看到=OR(A1=1,B1=2)。到目前为止一切顺利,众所周知。

但是,由于一些奇怪的原因,对于条件格式中使用的公式,没有完成翻译,因此您需要使用实际的列表分隔符编写公式。您可以使用Application.International(xlListSeparator). 但是,一旦设置,当您在具有不同设置的系统上打开该工作簿时,该公式将起作用(因此会发生某种翻译)。

如果你想灵活一点,请执行以下操作:

Const formula_1 = "=OR(A1=1<SEP>B1=2)"

Dim localFormula_1 As String
localFormula_1 = replace(formula_1, "<SEP>", Application.International(xlListSeparator))

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

顺便说一句:您不应该将小数分隔符和列表分隔符设置为相同的字符。


推荐阅读