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
问问题
698 次
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
您的“下标超出范围”可能来自无效的工作表名称。
您确定调用宏时的活动书是带有Latest和SFDC工作表的书。
与问题没有直接关系,但我建议您将函数原型更改为
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 回答