Я пытаюсь создать способ автоматизации сравнения, и он почти работает. У меня есть макрос, установленный, чтобы выделить все изменения между двумя листами и вставить их в третий.Проблема, с которой я сталкиваюсь, заключается в том, что при записи идентифицированных ячеек макрос завершается неудачно, когда ему нужно записать макрос, в котором есть пробелы.Я получаю сообщение об ошибке «13»: несоответствие типов, и когда я запускаю отладчик, он всегда выделяет эту строку кода
If Not cells.Value = ActiveWorkbook.Worksheets("Previous").cells(cells.Row, cells.Column).Value Then
cells.Interior.color = vbGreen
. Я заметил, что я получаю сообщение об ошибке «13»:Несоответствие типов, когда макрос попадает в пустую запись или имеет пробелы.
Sub CompareSheets()
Dim cells As range
'Adds a "Changes" sheet
Sheets.Add.Name = "Changes"
'Highlights the changes on the new data
For Each cells In ActiveWorkbook.Worksheets("Current").UsedRange
If Not cells.Value = ActiveWorkbook.Worksheets("Previous").cells(cells.Row, cells.Column).Value Then
cells.Interior.color = vbGreen
'Copies the cells with changes and brings them to the "Changes" sheet before highlighting them
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, cells.Column).Value = cells.Value
cells.copy
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, cells.Column).PasteSpecial Paste:=xlPasteFormats
'Copies the rows which have changes in them to the "Changes" sheet
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 1).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 1).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 2).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 2).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 3).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 3).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 4).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 4).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 5).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 5).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 6).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 6).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 7).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 7).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 8).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 8).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 9).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 9).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 10).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 10).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 11).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 11).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 12).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 12).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 13).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 13).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 14).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 14).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 15).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 15).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 16).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 16).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 17).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 17).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 18).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 18).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 19).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 19).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 20).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 20).Value
ActiveWorkbook.Worksheets("Changes").cells(cells.Row, 21).Value = ActiveWorkbook.Worksheets("Current").cells(cells.Row, 21).Value
End If
Next
Dim i As Long
'Delete blank rows on "Changes"
For i = ActiveWorkbook.Worksheets("Changes").UsedRange.Rows.Count To 1 Step -1
If WorksheetFunction.CountA(ActiveWorkbook.Worksheets("Changes").UsedRange.Rows(i)) = 0 Then
ActiveWorkbook.Worksheets("Changes").UsedRange.Rows(i).EntireRow.Delete
End If
Next i
End Sub