Excel VBA: несоответствие типов - PullRequest
0 голосов
/ 24 мая 2018

Я использовал код, описанный ниже;однако время от времени отладчик выдает ошибку «несоответствие типов».Этот код просто сравнивает две таблицы (A и B, они находятся в одной и той же книге) и выделяет различия на листе B (выделяя ячейки желтым цветом).Как я могу избавиться от ошибки "несоответствие типов"?

Также важно отметить, что рабочие листы имеют точно такой же формат, и данные каждого столбца начинаются в ячейке 12.

Любая помощь будет принята с благодарностью.

Option Explicit

Sub Compare_Tracker()
    Dim varSheetA As Variant
    Dim strRangeToCheck As String
    Dim iRow As Long
    Dim iCol As Long
    strRangeToCheck = "A12:K150"
    varSheetA = Worksheets("Main").Range(strRangeToCheck)
    varSheetB = Worksheets("Discrepancy Compare").Range(strRangeToCheck) ' or whatever your other sheet is.
    For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
        For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
           If varSheetA(iRow, iCol) <> varSheetB(iRow, iCol) Then
                ' Cells are different.
                ' Highlight different cells yellow.
                Worksheets("Discrepancy Compare").Cells(iRow + 11, iCol).Interior.ColorIndex = 36
            End If
        Next iCol
    Next iRow
End Sub 

1 Ответ

0 голосов
/ 25 мая 2018

Что ж, вот урок понимания типа для переменных. .Вы получаете несоответствие типов ошибка, потому что для некоторых диапазонов типы не могут быть сопоставлены.Я даю модифицированную версию вашего кода, чтобы лучше понять концепцию Type и решить проблему.

Например,Строка не может быть сопоставлена ​​с числом.Ошибка не может быть сравнена ни строкой, ни числом.

В приведенном ниже решении мы сначала сравним тип, используя VarType, и после того, как их тип совпадет успешно, мы выполним сопоставление второго уровня.

Option Explicit

Sub Compare_Tracker()
    Dim varSheetA As Variant, varSheetB as Variant
    Dim strRangeToCheck As String
    Dim iRow As Long
    Dim iCol As Long
    strRangeToCheck = "A12:K150"
    varSheetA = Worksheets("Main").Range(strRangeToCheck)
    varSheetB = Worksheets("Discrepancy Compare").Range(strRangeToCheck) ' or whatever your other sheet is.
    For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1)
        For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2)
           If VarType(varSheetA(iRow, iCol)) = VarType(varSheetB(iRow, iCol)) Then
               If varSheetA(iRow, iCol) <> varSheetB(iRow, iCol) Then
                   ' Cells are different.
                   ' Highlight different cells light yellow.
                   Worksheets("Discrepancy Compare").Cells(iRow + 11, iCol).Interior.ColorIndex = 36
                 End If
           Else
               ' Cells Type are different.
               ' Highlight different cells light red.
               Worksheets("Discrepancy Compare").Cells(iRow + 11, iCol).Interior.ColorIndex = 38
           End If
        Next iCol
    Next iRow
End Sub 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...