Ошибка несоответствия типов, почему?

Кто-нибудь может объяснить, почему возникает несоответствие типов при запуске If range...?
вот мой код

Sub Button2_Click()
Dim i As Integer
Dim k As Integer
For i = 2 To 1000
For x = 3 To 999
If Range("k" & i & ":bn" & i).Value = Range("k" & x & ":bn" & x).Value And Cells(i, 5).Value <> Cells(x, 5).Value Then
Range("k" & i & ":bn" & i).Interior.ColorIndex = 7
Range("k" & x & ":bn" & x).Interior.ColorIndex = 7
End If
Next x
Next i

End Sub

Я пытался использовать Cstr(), но ничего не изменилось

UP: я попытался использовать еще один цикл и ячейки вместо диапазона, и единственное, что я получаю, это ошибка, определяемая приложением или объектом:

Dim z As Integer
...
For z = 6 To 30
If Cells(i, z).Value = Cells(x, z).Value And Cells(i, 5).Value <> Cells(x, 5).Value Then

спасибо заранее


person Seya    schedule 19.03.2014    source источник
comment
Вы не можете сравнить весь диапазон вот так: Range("K2:BN2").Value=Range("K3:BN3").Value. См. этот вопрос о том, как это сделать: «как сравнить две целые строки на листе»> stackoverflow.com/questions/19395633/   -  person Dmitry Pavliv    schedule 19.03.2014
comment
@simoco, могу ли я вместо этого использовать ячейки().value?   -  person Seya    schedule 19.03.2014
comment
вы можете сравнить только одну ячейку с другой ячейкой. Но вы не можете сравнивать целые диапазоны таким образом. Если вам нужно сравнить целые диапазоны - посмотрите ссылку, которую я дал вам выше   -  person Dmitry Pavliv    schedule 19.03.2014
comment
@simoco, но когда я использую ячейки вместо диапазона, я получаю ошибку, определяемую приложением или объектом :(   -  person Seya    schedule 19.03.2014
comment
как именно вы их используете?   -  person Dmitry Pavliv    schedule 19.03.2014
comment
@simoco Я обновил тему, пожалуйста, посмотрите   -  person Seya    schedule 19.03.2014
comment
кажется, что ваши ячейки содержат ошибку на листе (например, #N/A, #DIV/0!, #VALUE! и т. д. Проверьте, пожалуйста, верно ли это для вас?   -  person Dmitry Pavliv    schedule 19.03.2014
comment
@simoco Я сделал глупую ошибку с именем переменной, извините, код в порядке. Но работает не так как надо, а жаль)   -  person Seya    schedule 19.03.2014
comment
давайте продолжим это обсуждение в чате   -  person Dmitry Pavliv    schedule 19.03.2014


Ответы (1)


Проблема в том, что вы пытаетесь сравнить два диапазона одной и той же «формы», но более одной ячейки. Excel VBA не позволяет этого... что-то вроде:

Sub test1()
    Dim r1 As Range, r2 As Range
    Set r1 = Range("A1:A2")
    Set r2 = Range("B1:B2")
    If r1.Value = r2.Value Then
        MsgBox "same"
    End If
End Sub

потерпит неудачу............. вам нужно поэлементное сравнение, например:

Sub test2()
    Dim r1 As Range, r2 As Range
    Set r1 = Range("A1:A2")
    Set r2 = Range("B1:B2")
    Dim i As Long, b As Boolean
    b = True
    For i = 1 To 2
        If r2(i).Value <> r1(i).Value Then
            b = False
        End If
    Next i
    If b Then
        MsgBox "same"
    End If
End Sub
person Gary's Student    schedule 19.03.2014