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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2011, 11:41   #1
Munchkin
 
Регистрация: 08.06.2011
Сообщений: 4
По умолчанию Конечный поиск

Есть таблица. В ней есть строки с "--------------------", и их надо удалить. Я использую следующий код:

Код:
Do While Cells.Find(What:="--------------------", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate = True
        Selection.EntireRow.Delete
Loop
Но после того, как удаляется последняя строка, прога при проверке из цикла не выходит, а выдается ошибку. Что я делаю не так?
Munchkin вне форума Ответить с цитированием
Старый 16.06.2011, 12:03   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Код:
Sub tt()
Dim x As Range
Do
Set x = Cells.Find(What:="--------------------", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False)
     If Not x Is Nothing Then x.EntireRow.Delete
Loop While Not x Is Nothing

End Sub
SearchFormat:=False я убрал, т.к. на 2000 у меня не идёт, добавьте у себя.
И кстати с таким способом, если подпадающие под критерий строки рядом, то вторая строка удаляется только при следующем проходе, а не следом за предыдущей.

И кстати2 - если тире в одном столбце и в ячейке только тире, то быстрее так:

Код:
Sub Main()
    Dim x As Range: Application.ScreenUpdating = False
    Set x = [A:A].Find("--------------------", , , xlWhole)
    If Not x Is Nothing Then
        [A:A].ColumnDifferences(x).EntireRow.Hidden = True
        ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
        Rows.Hidden = False
    End If
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 16.06.2011 в 12:10.
Hugo121 вне форума Ответить с цитированием
Старый 16.06.2011, 12:13   #3
Munchkin
 
Регистрация: 08.06.2011
Сообщений: 4
По умолчанию

Спасибо, первый способ работает на ура.
Второй не стал пробовать, ибо скорость не критична.
Munchkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить детерминированный конечный автомат Meru Общие вопросы Delphi 0 10.04.2011 15:57
не выдает конечный слитый массив! sproject Помощь студентам 1 24.03.2010 01:35
Конечный автомат для строк Infinite Помощь студентам 0 25.12.2009 21:08
Я сделал конечный автомат (правильно?) Arkuz Общие вопросы Delphi 2 11.10.2008 15:59
Конечный автомат на Delphi Arkuz Общие вопросы Delphi 4 02.10.2008 23:50