VBA-比较两张纸并突出显示更改

时间:2019-03-27 14:54:33

标签: excel vba

我正在尝试比较两张纸。工作表的结构绝对相同-> Sheet1中的AD4单元应与Sheet2中的AD4相同,如果不同,则突出显示AD4单元。只要数据存在,就应该这样做。

下面的代码不起作用,但是不显示任何错误消息。

Sub CompareAndHighlightDifferences()
Dim w1 As Worksheet, w2 As Worksheet
Dim c As Range, a As Range
Set w1 = Sheets("2019 Project Detail")
Set w2 = Sheets("2019 Project Detail SOURCE")
With w1
  For Each c In .Range("AD4", .Range("AD" & Rows.Count).End(xlUp))
    Set a = w2.Columns(30).Find(c.Value, LookAt:=xlWhole)
    If Not a Is Nothing Then
      If .Cells(c.Row, c.Column).Value <> w2.Cells(a.Row, a.Column) Then
         .Cells(c.Row, c.Column).Font.Color = vbRed
      End If
    End If
  Next c
End With
End Sub

请问您有什么建议吗?

非常感谢!

---------------------编辑----------------------

Sub CompareAndHighlightDifferences()
Dim w1 As Worksheet, w2 As Worksheet
Dim c As Range
Set w1 = Sheets("2019 Project Detail")
Set w2 = Sheets("2019 Project Detail SOURCE")

  For Each c In w1.Range("AD4", w1.Range("AD" & Rows.Count).End(xlUp))
    If w1.Cells(c.Row, c.Column).Value = w2.Cells(c.Row, c.Column).Value Then
       w1.Cells(c.Row, c.Column).Interior.Color = vbRed
    End If
  Next c

End Sub

2 个答案:

答案 0 :(得分:1)

我会用这样的东西:

Sub CompareAndHighlightDifferences()

Dim w1 As Worksheet, w2 As Worksheet

Set w1 = Sheets("2019 Project Detail")
Set w2 = Sheets("2019 Project Detail SOURCE")

With w1
    For Each cel In .UsedRange
        If cel.Value <> w2.Cells(cel.Row, cel.Column).Value Then cel.Font.Color = vbRed
    Next cel
End With

End Sub

编辑:如果工作表受到保护,则应在开头添加w1.Unprotect,在结尾添加w1.Protect

答案 1 :(得分:1)

问题在于您正在另一张表中搜索值,因此即使它不在同一单元格地址中,它也会匹配。

如果有条件,您可以删除此内容和以下内容:

Set a = w2.Columns(30).Find(c.Value, LookAt:=xlWhole)

在比较值时使用相同的地址:

如果.Cells(c.Row,c.Column).Value <> w2.Cells( c .Row, c .Column) .Value 然后

/ e:另外,您可能希望使用interior而不是font颜色,因为如果单元格为空白,将有一个看不到的区别