Страницы: 1
RSS
VBA - цикл For each + If - MagBox при соблюдении/несоблюдении условия
 
Добрый вечер,    
 
Пытаюсь породить процедуру, в которой, при проверке диапазона, если хоть одна ячейка окрашена цветом (т.е. условие соблюдается), выводилось бы сообщение "Есть красные ячейки", а если ни одной окрашенной цветом ячейки нет (т.е. условие не соблюдается), выводилось бы другое сообщение "Красных ячеек нет"    
Пишу примерно так:    
 
Set диапазон x = диапазон    
 
For each cell in диапазон x    
If cell.Interior.ColorIndex = 3 Then ' окрашена красным  
  Msgbox "Есть красные ячейки"  
  Exit for  
End if    
Next cell  
MsgBox "Красных ячеек нет"  
End sub  
 
Все нормально работает (вроде...) если условие не соблюдается (переход на сообщение "Красных ячеек нет". А вот если оно соблюдается, то выходит сначала ожидаемое мною сообщение "Есть красные ячейки", а потом сообщение "Красных ячеек нет".    
Вопрос: как этого избежать ?    
 
Спасибо!    
 
Файл с примером кода во вложении
 
Правильно - так в коде указали: строка MsgBox "Красных ячеек нет" стоит в самом конце кода и сработает независимо в любом случае. Попробуйте так:  
If cell.Interior.ColorIndex = 3 Then ' окрашена красным    
Msgbox "Есть красные ячейки"  
Exit for  
Else    
MsgBox "Красных ячеек нет"  
End if    
Next cell
 
Я поторопился: так будет после каждой "нормальной" ячейки выдавать сообщение. Поэтому попробуйте вот так:  
Sub test()  
Dim Cnt As Long  
Dim lLastRow As Variant  
Dim rRange As Range  
Dim cell As Variant  
lLastRow = ThisWorkbook.Worksheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row  
Set rRange = Range(Cells(2, 1), Cells(lLastRow, 1))  
For Each cell In rRange  
  If cell.Interior.ColorIndex = 3 Then  
     MsgBox "Есть красные ячейки", vbExclamation  
     Cnt = Cnt + 1  
     Exit For  
  End If  
Next cell  
  If Cnt = 0 Then MsgBox "Все данные указаны верно", vbInformation  
End Sub
 
Попробуйте так, введите перемнную, которая принимает значение "ИСТИНА" при выполнении условия, а можно после Msgbox "Есть красные ячейки" сделать Exit Sub, а не for...  
Set диапазон x = диапазон  
bred = false  
For each cell in диапазон x  
If cell.Interior.ColorIndex = 3 Then ' окрашена красным  
bred = true  
Msgbox "Есть красные ячейки"  
Exit for  
End if  
Next cell  
if bred then MsgBox "Красных ячеек нет"
 
Ну или так:  
 
Sub test()  
   Dim cell As Range, ra As Range, s As Long  
   Set ra = Range([A2], Range("A" & Rows.Count).End(xlUp))
   For Each cell In ra.Cells  
       s = s - (cell.Interior.Color = vbRed)  
   Next cell  
   Debug.Print "Найдено красных ячеек: ", s  
   MsgBox IIf(s > 0, "Есть красные ячейки", "Всё в порядке"), vbInformation  
End Sub
 
Спасибо, Игорь, Юрий! Все работает!!!! :-)
Страницы: 1
Читают тему
Наверх
Loading...