-1
Sub RunCompare()

Call compareSheets("Latest", "SFDC")

End Sub

Sub compareSheets(shtLatest As String, shtSFDC As String)

Dim mycell As Range
Dim mydiffs As Integer

'For each cell in sheet2 that is not the same in Sheet1, color it yellow
For Each mycell In ActiveWorkbook.Worksheets(shtSFDC).UsedRange
    If Not mycell.Value = ActiveWorkbook.Worksheets(shtLatest).Cells(mycell.Row, mycell.Column).Value Then

        mycell.Interior.Color = vbYellow
        mydiffs = mydiffs + 1

    End If
Next

'Display a message box to demonstrate the differences
MsgBox mydiffs & " differences found", vbInformation
ActiveWorkbook.Sheets(SFDC).Select

End Sub
4

2 回答 2

1
Sub RunCompare()

    compareSheets "Latest", "SFDC"

End Sub

'Compares two sheets and colours yellow any cell in sheet2 that is not the same as in sheet 1
Sub compareSheets(sheet1 As String, sheet2 As String)

    Dim rCell1 As Range
    Dim rCell2 As Range
    Dim nDiffs As Long ' Using a long because Integer may one day be too small

    Dim ws1 As Worksheet
    Dim ws2 As Worksheet

    Set ws1 = ActiveWorkbook.Worksheets(sheet1)
    Set ws2 = ActiveWorkbook.Worksheets(sheet2)

    For Each rCell1 In ws1.UsedRange.Cells
        Set rCell2 = ws2.Range(rCell1.Address)
        If rCell1.Value <> rCell2.Value Then
            rCell2.Interior.Color = vbYellow
            nDiffs = nDiffs + 1
        End If
    Next rCell1

    Debug.Print nDiffs

End Sub

这应该可以帮助您生成可行的解决方案。在您的代码中,“For Each mycell”行在“UsedRange”中的每个“Range”对象上创建一个循环,而不是在每个单独的单元格上。

于 2013-08-05T06:10:36.630 回答
0

您的“下标超出范围”可能来自无效的工作表名称。

您确定调用宏时的活动书是带有LatestSFDC工作表的书。

与问题没有直接关系,但我建议您将函数原型更改为

Sub compareSheets(ByVal shtLatest As Worksheet, ByVal shtSFDC As Worksheet)

将 all 替换ActiveWorkbook.Worksheets(shtSFDC)shtSFDC(same for shtLatest),最后将 call 替换为

Call compareSheets(ActiveWorkbook.Worksheets("Latest"), ActiveWorkbook.Worksheets("SFDC"))

或直接使用代号:

Call compareSheets(sheet1, sheet2)

这比compareSheets预期的表格更清晰,而不是文本。

于 2013-08-05T10:42:36.633 回答