比较同一工作簿中的两张excel工作表,突出显示差异

比较同一工作簿中的两张excel工作表,突出显示差异,excel,vba,Excel,Vba,我正在用Excel2007VBA做我的第一步。我要做的是编写一个宏,比较上一个和第二个excel工作表,并突出显示上一个工作表中的差异。正如您在下面看到的,我编写了以下代码,并且当我使用调试模式时,Excel不会显示任何错误,但它不会标记任何已进行更改的单元格,这是它应该做的。有人介意看一看并纠正我在下面代码中的潜在错误吗。多谢各位 Sub compare() Dim sh1 As Worksheet, sh2 As Worksheet Dim rCount As Long, cCount As

我正在用Excel2007VBA做我的第一步。我要做的是编写一个宏,比较上一个和第二个excel工作表,并突出显示上一个工作表中的差异。正如您在下面看到的,我编写了以下代码,并且当我使用调试模式时,Excel不会显示任何错误,但它不会标记任何已进行更改的单元格,这是它应该做的。有人介意看一看并纠正我在下面代码中的潜在错误吗。多谢各位

Sub compare()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim rCount As Long, cCount As Long
Set sh1 = Worksheets(Sheets.Count - 1)
Set sh2 = Worksheets(Sheets.Count)
rCount = sh1.Cells(Rows.Count, 1).End(xlUp).Row
cCount = sh1.Cells(Rows.Count, 1).End(xlUp).Row
Dim r As Long, c As Integer
For r = 1 To rCount
    For c = 1 To cCount
        If sh1.Cells(r, c) <> sh2.Cells(r, c) Then
           sh2.Cells(r, c).Interior.ColorIndex = 3
        End If
    Next c
Next r

End Sub

我猜sh1中只有一行数据。当您分配rcount时,您得到的值为1;当您分配cCount时,您得到的值相同,因为您分配它的方式与rcount相同。然后您可能会遍历一行和一列,只比较一个单元格,然后子例程退出


也许您的意思是:cCount=sh1.Cells1,ColumnsCount.EndxltoLeft.Column

您的cCount与rCount相同,但这并不能解释未标记单元格的原因。您测试过rCount的值吗?行和列的建议是正确的。非常感谢。Marco使用sh1和sh2的定义名称。但是这些名字是动态的,我的代码没有使用最后一页和最后第二页。有什么想法吗?不幸的是,我不知道为什么动态的“最后一页”逻辑不起作用。我以前从未见过这种用法,但有很多我没有见过,所以我认为它适合你的情况。您可能需要考虑一个常见的表命名约定,例如“数据表1”、“数据表2”等。然后,您可以通过您的页循环,然后选择RealWorksHeut.No.1,以确定哪一页是最后一页。