Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2010, 15:32   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Что-то я загнул, можно было и попроще:
Код:
Option Explicit

Sub test()
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False: On Error Resume Next

    Do
        Range("L:L").Find(what:="удалить", LookIn:=xlValues, LookAt:=xlPart).EntireRow.Delete
    Loop Until Err
    
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Application.EnableEvents = False можно и не ставить, ну на всякий случай.
Основное - Application.Calculation = xlCalculationManual и LookIn:=xlValues
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 04.10.2010, 17:00   #12
jungo
Форумчанин Подтвердите свой е-майл
 
Аватар для jungo
 
Регистрация: 14.11.2007
Сообщений: 163
По умолчанию

Вот так можно:

Код:
Dim AllRows As Object, FirstCell As Object, FoundCell As Object

    Application.ScreenUpdating = False

    Set FirstCell = Columns("L").Find(What:="удалить", LookAt:=xlWhole)
    If FirstCell Is Nothing Then GoTo Metka

    Set AllRows = Rows(FirstCell.Row)
    Set FoundCell = FirstCell

    Do
        Set FoundCell = Columns("L").FindNext(After:=FoundCell)
        Set AllRows = Union(Rows(FoundCell.Row), AllRows)
        If FoundCell.Address = FirstCell.Address Then Exit Do
    Loop
    AllRows.Delete
Metka:     Range("A1").Select
Jungo must die!!! (C) Bill Gates.
jungo вне форума Ответить с цитированием
Старый 04.10.2010, 17:14   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не, прямо так не пойдёт.
Так пойдёт:
Код:
    Set FirstCell = Columns("L").Find(What:="удалить", LookIn:=xlValues, LookAt:=xlPart)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 05.10.2010, 05:09   #14
макарошка
Новичок
Джуниор
 
Аватар для макарошка
 
Регистрация: 03.10.2010
Сообщений: 7
По умолчанию

Ай, какая красота! работает чисто)) Огромнейшее спасибо!!!
макарошка вне форума Ответить с цитированием
Старый 05.10.2010, 06:01   #15
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Могу добавить.
1. С позволения авторов кода, предложенного выше, можно чуть упростить. Например, так:
Код:
Sub Main1()
    Dim x As Range, y As Range, fst As String
    Application.ScreenUpdating = False
    Set x = [L:L].Find("удалить")
    If Not x Is Nothing Then
        fst = x.Address
        Do
            If y Is Nothing Then Set y = x Else Set y = Union(y, x)
            Set x = [L:L].FindNext(x)
        Loop While fst <> x.Address
    End If
    If Not y Is Nothing Then y.EntireRow.Delete
End Sub
2. Ну, и я опять о том, что благодаря встроенным в Excel методам, во многих случаях можно обойтись без циклов. Задачу можно решить, например, следующим образом:
Код:
Sub Main2()
    Dim x As Range: Application.ScreenUpdating = False: Rows.Hidden = False
    Set x = [L:L].Find("удалить"): If x Is Nothing Then Exit Sub
    [L:L].ColumnDifferences(x).EntireRow.Hidden = True
    ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Delete
    Rows.Hidden = False
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 05.10.2010, 09:09   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Только вот опять же, в данной задаче просто так
Set x = [L:L].Find("удалить")
не годится...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код символа "BackSpase" в ANSI(Если такой есть...) ChEaTeR-abc Помощь студентам 3 30.06.2010 17:39
Удалить строки "(пусто)" в сводной таблице kipish_lp Microsoft Office Excel 12 06.05.2010 10:21
Как удалить ярлык из папки "Автозагрузка"? docbrain Общие вопросы Delphi 5 15.01.2010 11:27
необходимо сообщение - "не введено число", если вводится слово Sour Помощь студентам 6 23.08.2007 19:49
как удалить анти вирус( касперский 2006)если она не работает и ее не возможно удалить Alar Общие вопросы Delphi 0 29.10.2006 21:36