在Excel Visual Basic中比较两张纸

我想要创build一个macros来比较两个版本的报表,以便在创build新报表时检查历史数据是否被更改。

我想循环遍历一张纸的使用范围,然后将该范围内的每个单元格与另一张纸上的相同地址进行比较。

这是迄今为止的代码:

Sub Compare_Report() Dim vRange As Range Dim v_Rangeversie As Range On Error GoTo ErrorCatch Debug.Print Now Set v_Rangeversie = Worksheets("VorigeVersie").UsedRange For Each v_range In Worksheets("1. Overzicht").UsedRange For Each vCell In v_range Debug.Print vCell.Address 'If vCell.Value != v_Rangeversie.Range.Cell(vCell.address) 'Then ' Debug.Print "Ongelijk" ' Cells are different. ' varSheetB.Cell.Interior.ColorIndex = 3 ' varSheetB.Cell.Font.Color = 2 'End If Next Next Exit Sub ErrorCatch: MsgBox Err.Description End Sub 

我无法得到这个If语句的工作:

  'If vCell.Value != v_Rangeversie.Range.Cell(vCell.address) 

我错过了什么? 请帮忙。

问候,1月

那么这样的事情呢?

 Sub compareSheets(shtBefore As String, shtAfter As String) 'Retrieved from MrExcel.Com July 2012 Dim mycell As Range Dim mydiffs As Integer For Each mycell In ActiveWorkbook.Worksheets(shtAfter).UsedRange If Not mycell.Value = _ ActiveWorkbook.Worksheets(shtBefore).Cells(mycell.Row, mycell.Column).Value Then 'Or use "mycell.Value <> othercell.Value" mycell.Interior.Color = vbYellow mydiffs = mydiffs + 1 End If Next MsgBox mydiffs & " differences found", vbInformation ActiveWorkbook.Sheets(shtAfter).Select End Sub 

它突出了黄色的差异。

为了使用它,你应该在另一个子类中调用它:

 Sub highlight_differences() Call compareSheets("1. Overzicht", "VorigeVersie") End Sub 

条件格式替代。 你可能想写在VBA中,以便在生成报告后调用它…这是一个单线程:

 Worksheets("1. Overzicht").UsedRange.FormatConditions.Add _ (xlExpression, , "=A1<>VorigeVersie!A1").Interior.ColorIndex = 3