Добрый вечер, все время нарываюсь на коварство условия if
При дублировании код отрабатывает Если хочу добавить else (закомментированный кусок кода) - неправильно отрабатывает
Хочу в случае отсутствия дубликатов, чтобы писало ссобщение, что дубликатов нет. И выходило из макроса. А оно при наличии дубля все равно пишет, что дубля нет... Прошу подсказать, что не так...
Добрый вечер, все время нарываюсь на коварство условия if
При дублировании код отрабатывает Если хочу добавить else (закомментированный кусок кода) - неправильно отрабатывает
Хочу в случае отсутствия дубликатов, чтобы писало ссобщение, что дубликатов нет. И выходило из макроса. А оно при наличии дубля все равно пишет, что дубля нет... Прошу подсказать, что не так...ant6729
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lr2&, n& Cancel = True lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row n = Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target) If n = 1 Then MsgBox "Не найден дубликат" Target.Interior.ColorIndex = xlNone ElseIf n = 0 Then MsgBox "Не найдено значение" Else MsgBox "Найден дубликат" Target.Interior.Color = RGB(250, 143, 150) End If End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lr2&, n& Cancel = True lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row n = Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target) If n = 1 Then MsgBox "Не найден дубликат" Target.Interior.ColorIndex = xlNone ElseIf n = 0 Then MsgBox "Не найдено значение" Else MsgBox "Найден дубликат" Target.Interior.Color = RGB(250, 143, 150) End If End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To lr2 If Target = Sheets("Лист2").Cells(i, 1).Value Then MsgBox "Найден дубликат" Target.Interior.Color = RGB(250, 143, 150) Exit Sub End If Next i MsgBox "Не найден дубликат" End Sub
[/vba] Можно еще примерно как у Сергея выше, только методом Find, еще можно диапазон в массив занести и там проверять. Или в словарь. В общем, много еще вариантов.
Если хотите именно циклом, то так можно [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To lr2 If Target = Sheets("Лист2").Cells(i, 1).Value Then MsgBox "Найден дубликат" Target.Interior.Color = RGB(250, 143, 150) Exit Sub End If Next i MsgBox "Не найден дубликат" End Sub
[/vba] Можно еще примерно как у Сергея выше, только методом Find, еще можно диапазон в массив занести и там проверять. Или в словарь. В общем, много еще вариантов._Boroda_
Спасибо, KuklP Вы сделали так, как я попросил Но нужно немного иначе Нужно, чтобы просто искало повторения листе. А CountIf там не при чем, то что там две 3 подряд на лист 2 - это к вопросу не относится.
Просто если есть таргет лист 1 = значение на лист2 - тогда "есть дубль" Если дубля нет - тогда "нет дубля"
Спасибо, KuklP Вы сделали так, как я попросил Но нужно немного иначе Нужно, чтобы просто искало повторения листе. А CountIf там не при чем, то что там две 3 подряд на лист 2 - это к вопросу не относится.
Просто если есть таргет лист 1 = значение на лист2 - тогда "есть дубль" Если дубля нет - тогда "нет дубля"ant6729
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lr2& Cancel = True lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row If Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target) Then MsgBox "Найден дубликат" Target.Interior.Color = RGB(250, 143, 150) Else MsgBox "Не найден дубликат" Target.Interior.ColorIndex = xlNone End If End Sub
[/vba]
Тогда еще проще: [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lr2& Cancel = True lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row If Application.CountIf(Sheets("Лист2").Range("a1:a" & lr2), Target) Then MsgBox "Найден дубликат" Target.Interior.Color = RGB(250, 143, 150) Else MsgBox "Не найден дубликат" Target.Interior.ColorIndex = xlNone End If End Sub