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
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)
allActiveWorkbook.Worksheets(shtSFDC)
をshtSFDC
( と同じshtLatest
) に置き換え、最後に call をに置き換えます
Call compareSheets(ActiveWorkbook.Worksheets("Latest"), ActiveWorkbook.Worksheets("SFDC"))
またはコード名で直接:
Call compareSheets(sheet1, sheet2)
compareSheets
これは、テキストではなくシートに期待されるように明確です。
于 2013-08-05T10:42:36.633 に答える