我已经成功地使此字符串比较可用于一列。我将范围扩展到两列,当查看进行比较的本地窗口时,它会出现。由于某些原因,我无法破译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
答案 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
上面的代码仅显示您遇到的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
,则需要修改此代码。