2012-02-14 41 views
0

我在这里有代码形式的另一篇文章,但我似乎无法得到它实际上突出显示每行单个单元格的差异。我有最新的表格和上一张表格;想法是代码应该比较一列中的序列号(两个工作表上的序列号)并做两件事:匹配两个工作表中同一列的值,然后比较整个行的差异

1)如果当前工作表中出现一个值,但不在“上一个”上,则整个当前工作表上的行突出显示为绿色。 (这与当前的代码工作);和 2)如果在两张纸上都有匹配的值,则应该比较这些行,并且当前工作表上与“上一页”不同的任何值将高亮显示为黄色。 (这不起作用)

列的数量和顺序始终相同。序列号不会更改,并且对每个条目都是唯一的。我一直在寻找的代码是:

Sub NewUpdates() 

    Const ID_COL As Integer = 31 'ID is in this column 
    Const NUM_COLS As Integer = 32 'how many columns are being compared? 

    Dim shtNew As Excel.Worksheet, shtOld As Excel.Worksheet 
    Dim rwNew As Range, rwOld As Range, f As Range 
    Dim x As Integer, Id 
    Dim valOld, valNew 

    Set shtNew = ActiveWorkbook.Sheets("CurrentList") 
    Set shtOld = ActiveWorkbook.Sheets("PreviousList") 

    Set rwNew = shtNew.Rows(5) 'first entry on "current" sheet 

    Do While rwNew.Cells(ID_COL).Value <> "" 

     Id = rwNew.Cells(ID_COL).Value 
     Set f = shtOld.UsedRange.Columns(ID_COL).Find(Id, , xlValues, xlWhole) 
     If Not f Is Nothing Then 
      Set rwOld = f.EntireRow 

      For x = 1 To NUM_COLS 
       If rwNew.Cells(x).Value <> rwOld.Cells(x).Value Then 
        rwNew.Cells.Interior.Color = vbYellow 
       Else 
        rwNew.Cells.Interior.ColorIndex = xlNone 
       End If 
      Next x 

     Else 
      rwNew.EntireRow.Interior.Color = vbGreen 'new entry 
     End If 

     Set rwNew = rwNew.Offset(1, 0) 'next row to compare 

     Loop 

End Sub 

我没有太大变化的编码本身的东西,但我把这个从最初的讨论没有继续深入任何。有关更新的任何想法,以便我可以突出显示单个细胞显示差异?

编辑:发现蒂姆威廉姆斯回答类似问题的链接,我发现这个代码。它可以找到here

回答

2

如果你改变,你改变颜色为黄色至该部分(注意额外的“(X)”),它应该工作:

For x = 1 To NUM_COLS 
    If rwNew.Cells(x).Value <> rwOld.Cells(x).Value Then 
     rwNew.Cells(x).Interior.Color = vbYellow 
    Else 
     rwNew.Cells(x).Interior.ColorIndex = xlNone 
    End If 
Next x 
+0

这似乎这样的伎俩。感谢您的快速访问。 – Jon 2012-02-14 20:14:13

相关问题