VBA: во время выполнения 1004 Ошибка метода «Range» объекта «_Worksheet» при проверке дубликатов - PullRequest
0 голосов
/ 05 июня 2018

В следующей таблице я хотел бы проверить строку 3 на наличие дубликатов:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lCol As Long
    Dim c1 As Long, c2 As Long
    lCol = Cells(3, Columns.Count).End(xlToLeft).Column
    If lCol < 8 Then Exit Sub
    If Not Intersect(Target, Range(Cells(3, 7), Cells(3, lCol))) Is Nothing Then
      For c1 = 7 To lCol
        For c2 = 8 To lCol
          If c1 <> c2 And Cells(3, c1) = Cells(3, c2) And Cells(3, c1) <> "" Then
            MsgBox "You cannot have duplicate values"
            If c1 > c2 Then
              With Cells(3, c1)
                .ClearContents
                .Select
              End With
            Else
              With Cells(3, c2)
                .ClearContents
                .Select
              End With
            End If
          End If
        Next
      Next
    End If
End Sub

Когда я проверяю код (вставляя дублирующееся значение или фактически просто любое значение), я получаю следующее сообщение об ошибке:

Ошибка времени выполнения '1004': метод 'Диапазон' og объекта '_Worksheet' не выполнен

в строке:

If Not Intersect(Target, Range(Cells(3, 7), Cells(3, lCol))) Is Nothing 

Что такоеЯ делаю не так?

1 Ответ

0 голосов
/ 05 июня 2018

Вы попадаете в бесконечный цикл, потому что вы меняете значения ячеек, и событие Worksheet_Change запускается снова и снова:

If c1 > c2 Then
  With Cells(3, c1)
    .ClearContents
    .Select
  End With
Else
  With Cells(3, c2)
    .ClearContents
    .Select
  End With
End If

Чтобы избежать этого, отключите такие события, какэто:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False    
    'your code        
    Application.EnableEvents = True

End Sub
...