2014-10-01 120 views
0

我正在做我在Excel 2007 vba中的第一步。我想要做的是编写一个宏,比较我的最后一个和最后一个excel表单,并突出显示最后一个表单的差异。正如你在下面看到的,我对以下代码进行了编码,并且当我使用调试模式时,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 

末次

+0

你cCount相同RCOUNT但是,这并不说明没有被标记细胞。你有没有测试过rCount有什么价值? – Barry 2014-10-01 20:23:05

回答

0

我的猜测是,你只有在SH1数据的单行。当你分配rcount时,你的值为1,当你分配cCount的时候,你得到了同样的价值,因为你的分配方式与rcount相同。然后你可能遍历一行和一列,只比较一个单元格,然后子例程退出。

也许你的意思是:cCount = sh1.Cells(1, ColumnsCount).End(xltoLeft).Column

+0

行和列的建议是正确的。谢谢! Marco使用sh1和sh2的定义名称。但是这些名字是动态的,并且不知何故,我的代码中没有使用最后一张和最后一张。有任何想法吗? – Doozer 2014-10-02 07:22:38

+0

不幸的是,我不确定为什么动态的'最后一张'逻辑不起作用。我从来没有见过使用过,但有很多我没见过,所以我认为这是适合你的情况。您可能需要考虑常见的工作表命名约定,如“DataSheet1”,“DataSheet2”等。然后,您可以遍历工作表并选择Right(Worksheet.name,1)以确定哪个工作表是“最后一个”。 – JNevill 2014-10-02 13:13:30

相关问题