Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление строки по заданному символу - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строки по заданному символу (Макросы/Sub)
Удаление строки по заданному символу
emkub Дата: Пятница, 15.04.2016, 19:38 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Здравствуйте!
Возникла сложность на ровном месте. Вот рабочий макрос:
[vba]
Код
Sub Удаление_стр_с_тегами()

' удалить строку, если в ячейках.. есть символ "<"

Application.ScreenUpdating = 0

Dim n&, i&, r As Range

n = Cells(Rows.Count, "a").End(xlUp).Row
For i = 2 To n

    If InStr(Cells(i, "g"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "g").EntireRow Else Set r = Union(r, Cells(i, "g").EntireRow)
    If InStr(Cells(i, "l"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "l").EntireRow Else Set r = Union(r, Cells(i, "l").EntireRow)
    If InStr(Cells(i, "m"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "m").EntireRow Else Set r = Union(r, Cells(i, "m").EntireRow)
    If InStr(Cells(i, "n"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "n").EntireRow Else Set r = Union(r, Cells(i, "n").EntireRow)
    If InStr(Cells(i, "o"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "o").EntireRow Else Set r = Union(r, Cells(i, "o").EntireRow)
           
Next
    r.Delete Shift:=xlUp
    
Application.ScreenUpdating = 1
    
End Sub
[/vba]

Но он отказывается работать, если по заданным параметрам не нашлось совпадений. Он выдаёт ошибку, если в тексте нет символа "<". Если есть хоть одно совпадение - работает хорошо.
Скажите пожалуйста, где я ошибся?
К сообщению приложен файл: 9614602.xlsm(20Kb)


Сообщение отредактировал emkub - Пятница, 15.04.2016, 19:39
 
Ответить
СообщениеЗдравствуйте!
Возникла сложность на ровном месте. Вот рабочий макрос:
[vba]
Код
Sub Удаление_стр_с_тегами()

' удалить строку, если в ячейках.. есть символ "<"

Application.ScreenUpdating = 0

Dim n&, i&, r As Range

n = Cells(Rows.Count, "a").End(xlUp).Row
For i = 2 To n

    If InStr(Cells(i, "g"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "g").EntireRow Else Set r = Union(r, Cells(i, "g").EntireRow)
    If InStr(Cells(i, "l"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "l").EntireRow Else Set r = Union(r, Cells(i, "l").EntireRow)
    If InStr(Cells(i, "m"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "m").EntireRow Else Set r = Union(r, Cells(i, "m").EntireRow)
    If InStr(Cells(i, "n"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "n").EntireRow Else Set r = Union(r, Cells(i, "n").EntireRow)
    If InStr(Cells(i, "o"), "<") > 0 Then If r Is Nothing Then Set r = Cells(i, "o").EntireRow Else Set r = Union(r, Cells(i, "o").EntireRow)
           
Next
    r.Delete Shift:=xlUp
    
Application.ScreenUpdating = 1
    
End Sub
[/vba]

Но он отказывается работать, если по заданным параметрам не нашлось совпадений. Он выдаёт ошибку, если в тексте нет символа "<". Если есть хоть одно совпадение - работает хорошо.
Скажите пожалуйста, где я ошибся?

Автор - emkub
Дата добавления - 15.04.2016 в 19:38
_Boroda_ Дата: Пятница, 15.04.2016, 19:55 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11545
Репутация: 4754 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А если так?
[vba]
Код
For i = 2 To n
On error resume next
If...
...
On error goto 0
Next
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА если так?
[vba]
Код
For i = 2 To n
On error resume next
If...
...
On error goto 0
Next
[/vba]

Автор - _Boroda_
Дата добавления - 15.04.2016 в 19:55
emkub Дата: Пятница, 15.04.2016, 20:09 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Результат тот же.

Run-time error '91'
Object variable or With block variable not set
 
Ответить
СообщениеРезультат тот же.

Run-time error '91'
Object variable or With block variable not set

Автор - emkub
Дата добавления - 15.04.2016 в 20:09
Pelena Дата: Пятница, 15.04.2016, 20:14 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11605
Репутация: 2573 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
А если условие поставить типа
[vba]
Код
If Not r Is Nothing Then r.Delete Shift:=xlUp
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеА если условие поставить типа
[vba]
Код
If Not r Is Nothing Then r.Delete Shift:=xlUp
[/vba]

Автор - Pelena
Дата добавления - 15.04.2016 в 20:14
emkub Дата: Пятница, 15.04.2016, 20:17 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
О! Работает!
Я ставил подобную проверку, только без "Not" - вот где запорол :)
Благодарю!
 
Ответить
СообщениеО! Работает!
Я ставил подобную проверку, только без "Not" - вот где запорол :)
Благодарю!

Автор - emkub
Дата добавления - 15.04.2016 в 20:17
KuklP Дата: Пятница, 15.04.2016, 21:04 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2332
Репутация: 477 ±
Замечаний: 0% ±

2003-2010
Без некоторых ненужных телодвижений:
[vba]
Код
Sub Удаление_стр_с_тегами()
    Dim i&, r As Range, s$
    For i = 2 To Cells(Rows.Count, "a").End(xlUp).Row
        s = Cells(i, 7) & Cells(i, 12) & Cells(i, 13) & Cells(i, 14) & Cells(i, 15)
        If InStr(s, "<") Then If r Is Nothing Then Set r = Rows(i) Else Set r = Union(r, Rows(i))
    Next
    If Not r Is Nothing Then r.Delete
End Sub
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеБез некоторых ненужных телодвижений:
[vba]
Код
Sub Удаление_стр_с_тегами()
    Dim i&, r As Range, s$
    For i = 2 To Cells(Rows.Count, "a").End(xlUp).Row
        s = Cells(i, 7) & Cells(i, 12) & Cells(i, 13) & Cells(i, 14) & Cells(i, 15)
        If InStr(s, "<") Then If r Is Nothing Then Set r = Rows(i) Else Set r = Union(r, Rows(i))
    Next
    If Not r Is Nothing Then r.Delete
End Sub
[/vba]

Автор - KuklP
Дата добавления - 15.04.2016 в 21:04
emkub Дата: Пятница, 15.04.2016, 21:18 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Сейчас проверим! Это хорошо, когда без лишних телодвижений :)


Сообщение отредактировал emkub - Пятница, 15.04.2016, 21:23
 
Ответить
СообщениеСейчас проверим! Это хорошо, когда без лишних телодвижений :)

Автор - emkub
Дата добавления - 15.04.2016 в 21:18
emkub Дата: Пятница, 15.04.2016, 21:29 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 107
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
KuklP, всё отлично работает!
А сам макрос возьму в свой набор :)
Спасибо!
 
Ответить
СообщениеKuklP, всё отлично работает!
А сам макрос возьму в свой набор :)
Спасибо!

Автор - emkub
Дата добавления - 15.04.2016 в 21:29
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление строки по заданному символу (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!