Сравнение двух листов «Ошибка времени выполнения« 13 »: ошибка несоответствия типов появляется ближе к концу сравнения - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь создать способ автоматизации сравнения, и он почти работает. У меня есть макрос, установленный, чтобы выделить все изменения между двумя листами и вставить их в третий.Проблема, с которой я сталкиваюсь, заключается в том, что при записи идентифицированных ячеек макрос завершается неудачно, когда ему нужно записать макрос, в котором есть пробелы.Я получаю сообщение об ошибке «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

1 Ответ

0 голосов
/ 20 мая 2019

Я попытался имитировать ваш код и сразу получил флаг на For Each cells In ActiveWorkbook.Worksheets("Current").UsedRange, поэтому мне нужно было установить диапазон для работы.

После этого я получал ошибку 9, индекс вне диапазона, поэтому я поменял использование Cells на cell и смог заставить этот код работать:

Option Explicit

Sub fdsa()
    Dim cell As Range, ur As Range
    Set ur = Sheets(1).UsedRange
    For Each cell In ur
        Debug.Print cell.Value
        If Not cell.Value = Sheets(2).Cells(cell.Row, cell.Column).Value Then
        cell.Interior.Color = vbGreen
        End If
    Next
End Sub

Мои листы были простыми, но выглядели так (после запуска кода):

Листы (1), ток: enter image description here

Листы (2), предыдущий: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...