Удаление строки по условию

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте kuznetsovSergey.
в Вашей конструкции есть недостаток, который может привести к ошибке при совпадении двух условий проверки :

Код: Выделить всё

...
  sheet15 = Sheets("name_page").Cells(i, 15).Value
  sheet12 = Sheets("name_page").Cells(i, 12).Value
If sheet15 = d Then 'при выполнении условия
    Sheets("name_page").Rows(i).Delete 'стока удаляется 
    i = i - 1 ' указатель номера строки уменьшается на единицу 
End If
If (Left(sheet15, Len(b)) = b) Then 'и при выполнении условия 
    Sheets("name_page").Rows(i).Delete 'удаляется предыдущая строка (!)
...

Код: Выделить всё

...
With Sheets("name_page")
    While Not IsEmpty(.Cells(i, 1))
        sheet15 = .Cells(i, 15).Value:        sheet12 = .Cells(i, 12).Value
        If sheet15 = d Then
            .Rows(i).Delete
        ElseIf (Left(sheet15, Len(b)) = b) Then
            .Rows(i).Delete
        ElseIf sheet12 <> e And sheet12 <> f And sheet12 <> g Then
            .Rows(i).Delete
        Else
            i = i + 1
        End If
    Wend
End With
...
подобное исправление кода освобождает его от этого недостатка и лишних проверок внутри цикла.
Евгений
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

Teslenko_EA писал(а):Здравствуйте kuznetsovSergey.
в Вашей конструкции есть недостаток, который может привести к ошибке при совпадении двух условий проверки :

Код: Выделить всё

...
  sheet15 = Sheets("name_page").Cells(i, 15).Value
  sheet12 = Sheets("name_page").Cells(i, 12).Value
If sheet15 = d Then 'при выполнении условия
    Sheets("name_page").Rows(i).Delete 'стока удаляется 
    i = i - 1 ' указатель номера строки уменьшается на единицу 
End If
If (Left(sheet15, Len(b)) = b) Then 'и при выполнении условия 
    Sheets("name_page").Rows(i).Delete 'удаляется предыдущая строка (!)
...

Код: Выделить всё

...
With Sheets("name_page")
    While Not IsEmpty(.Cells(i, 1))
        sheet15 = .Cells(i, 15).Value:        sheet12 = .Cells(i, 12).Value
        If sheet15 = d Then
            .Rows(i).Delete
        ElseIf (Left(sheet15, Len(b)) = b) Then
            .Rows(i).Delete
        ElseIf sheet12 <> e And sheet12 <> f And sheet12 <> g Then
            .Rows(i).Delete
        Else
            i = i + 1
        End If
    Wend
End With
...
подобное исправление кода освобождает его от этого недостатка и лишних проверок внутри цикла.
Евгений
спасибо, данный код работает отлично ! и действительно предотвратил повторения условия удаления.
Ответить