两列的字符串比较不会返回If语句结果

时间:2019-02-09 16:55:34

标签: excel vba

我已经成功地使此字符串比较可用于一列。我将范围扩展到两列,当查看进行比较的本地窗口时,它会出现。由于某些原因,我无法破译if语句以在字符串比较为正的情况下更改单元格的颜色。

没有收到任何错误,但也没有得到任何响应。

我走了过去,看着当地的窗户,我在那儿观察到的一切都告诉我正在进行比较,所以我对可能丢失的内容有些困惑。

Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range 
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = Range("c1")
            Set allName = Range("a1:b7")

            For Each cell In allName.cells
                If StrComp(baseName.Value, cell.Value, vbTextCompare) = 1 Then
                  cell.Interior.Color = vbYellow
                End If
            Next cell

    End With

End Sub

这是我提到的一栏式工作版本

Sub ColourDuplicateName() 'Works 

Dim baseName As Range

With ThisWorkbook.Worksheets("sheet1")
Set baseName = .Range("b1")

For I = 1 To 7
    If StrComp(baseName.Value, cells(I, 1).Value, vbTextCompare) = 1 Then
    cells(I, 1).Interior.ColorIndex = 3
    End If
Next I

End With
End Sub

1 个答案:

答案 0 :(得分:0)

您对StrComp返回值的解释不正确。检查VBA帮助。

Option Explicit
Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = .Range("c1")
            Set allName = .Range("a1:b7")

            For Each cell In allName.Cells
                If StrComp(baseName.Value, cell.Value, vbTextCompare) = 0 Then
                  cell.Interior.Color = vbYellow
                End If
            Next cell

    End With

End Sub

enter image description here

上面的代码仅显示您遇到的StrComp问题,它不是很动态。如果baseName发生更改,则必须添加代码以删除颜色,然后重新添加颜色。您当然可以通过事件宏来执行此操作。

但是,更动态的方法是只设置条件格式。您只需执行一次,就可以完成相同的操作。

要在VBA代码中执行此操作,例如:

Option Explicit
Sub ColourDuplicateNameTwoCol() 'Work in progress

    Dim baseName As Range
    Dim allName As Range
    Dim cell As Range

    With ThisWorkbook.Worksheets("sheet1")
            Set baseName = .Range("c1")
            Set allName = .Range("a1:b7")
    End With

    With baseName.FormatConditions
        .Delete
        .Add Type:=xlCellValue, _
            Operator:=xlEqual, _
            Formula1:=baseName
        .Item(1).Interior.Color = vbYellow
    End With

End Sub

如果您要保留FormatConditions的其他allNames,则需要修改此代码。