Страница 3 из 3

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

Добавлено: 13 апр 2009, 19:01
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
...
подобное исправление кода освобождает его от этого недостатка и лишних проверок внутри цикла.
Евгений

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

Добавлено: 14 апр 2009, 10:05
kuznetsovSergey
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
...
подобное исправление кода освобождает его от этого недостатка и лишних проверок внутри цикла.
Евгений
спасибо, данный код работает отлично ! и действительно предотвратил повторения условия удаления.