Excel 运行时错误5以编程方式应用条件格式时过程调用或参数无效

Excel 运行时错误5以编程方式应用条件格式时过程调用或参数无效,excel,vba,Excel,Vba,如果满足指定的条件,我将尝试对B列和C列中的单元格应用不同的颜色。我有两个公式 如果B不为空且G中的对应单元格不为空 如果C不为空且G中的对应单元格不为空 我在函数中得到一个无效的过程错误r.FormatConditions.Add Xexpression,公式1:=公式 我做错了什么 请参阅下面的代码: Public Sub applyColor() Dim ws As Worksheet, thisWs As Worksheet Dim myRangeB As R

如果满足指定的条件,我将尝试对B列和C列中的单元格应用不同的颜色。我有两个公式

  • 如果B不为空且G中的对应单元格不为空
  • 如果C不为空且G中的对应单元格不为空
  • 我在函数中得到一个无效的过程错误<代码>r.FormatConditions.Add Xexpression,公式1:=公式

    我做错了什么

    请参阅下面的代码:

        Public Sub applyColor()
    
        Dim ws As Worksheet, thisWs As Worksheet
    
        Dim myRangeB As Range
        Dim myRangeC As Range
        Dim lastRow As Long
    
        Set thisWs = ActiveSheet
        setSheets
    
    
        With ActiveSheet 'delete conditional formatting
            .Range("B:C").FormatConditions.Delete
            lastRow = .Range("A" & Rows.Count).End(xlUp).Row
            Set myRangeB = .Range("B2:B" & lastRow) 'The range to be formatted
            Set myRangeC = .Range("C2:C" & lastRow)
    
        End With
    
    
        For Each ws In ThisWorkbook.Worksheets
            If ws.name = wsColon.name Or ws.name = wsLung.name Or ws.name = wsMela.name Then
                ws.Activate
    
                Call FormatRange(myRangeB, 3, "=AND(NOT(ISBLANK($B1)),NOT(ISBLANK($G1)))")
                Call FormatRange(myRangeC, 29, "=AND(NOT(ISBLANK($C1)),NOT(ISBLANK($G1)))")
    
            End If
        Next
        thisWs.Activate
    
    End Sub
    
    Public Sub FormatRange(r As Range, colorIndex As Integer, formula As String)
    r.FormatConditions.Add xlExpression, Formula1:=formula
    r.FormatConditions(r.FormatConditions.Count).Interior.colorIndex = colorIndex
    End Sub
    

    感谢您的帮助

    我意识到您的本地设置需要一个
    代替
    ,但在vba中必须使用
    。尝试更换
    的分隔符。感谢您的建议,现在代码将执行;但是,条件格式未按预期工作。它突出显示空白单元格,我希望在新数据输入到B列和C列后看到颜色变化,但它不会改变颜色。我在B和C中有数据验证下拉列表,我不确定它是否会影响条件格式。你知道吗?主要的问题是它没有循环通过结肠、肺和黑色素瘤。它仅将格式化应用于
    Activesheet
    。这是因为您在循环之前设置了Activesheet的范围。在调用sub之前,您需要重新选择循环中的范围。将您的
    with
    块放在
    ws之后。激活
    。是的,我知道了,谢谢!