Страницы: 1
RSS
Помогите объеденить два цикла и действия в макросе на удаление строк и столбцов
 
Добрый день. Из одного макроса по удалению строк - самому получилось аналогично составить второй, на удаление столбцов. Оба простые и по отдельности работают.
Но в одном макросе работать не хотят - отанавливается и выдает ошибку в строке:        
Код
   If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)      ' добавляем столбец в диапазон для удаления
Сам макрос выглядит так, все подписано и должно быть понятно:
Код
Sub DeleteRowsAndColumns123()
Dim ra As Range, delra As Range, DeleteRow As String, DeleteColumn As String     'как обычно, задаем переменные
    
DeleteRow = "Удалить строку"       ' удаляем строки с таким текстом
DeleteColumn = "Удалить столбец"       ' удаляем столбцы с таким текстом
    
For Each ra In ActiveSheet.UsedRange.Rows      ' перебираем все строки в используемом диапазоне листа
If Not ra.Find(DeleteRow, , xlValues, xlPart) Is Nothing Then     ' если в строке найден искомый текст
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)     ' добавляем строку в диапазон для удаления
End If      'Конец проверки "если"
Next       'Конец цикла поиска
If Not delra Is Nothing Then delra.EntireRow.Delete       ' если подходящие столбцы найдены - удаляем их
    
For Each ra In ActiveSheet.UsedRange.Columns       ' перебираем все столбцы в используемом диапазоне листа
If Not ra.Find(DeleteColumn, , xlValues, xlPart) Is Nothing Then     ' если в столбце найден искомый текст
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)      ' добавляем столбец в диапазон для удаления
End If      'Конец проверки "если"
Next        'Конец цикла поиска
If Not delra Is Nothing Then delra.EntireColumn.Delete       ' если подходящие строки найдены - удаляем их
End Sub
Офис 2010. Пожалуйста, подскажите, где я ошибся?
Не перестаю удивляться возможностям excel и VBA.
 
Сам сейчас заметил что строки 9 и 16(на которой ошибка) совершенно одинаковые и я их оставил без изменения. Хотя 9 нужны для удаления строк. а 16 для удаления столбцов. Но ни опыта и не знаний у меня все равно не хватает ля решения сей задачи. М.б. по другому должна выглядить строка 16?
Не перестаю удивляться возможностям excel и VBA.
 
Попробуйте в 13 записать
Код
set delra = nothing

подробнее не изучал.
 
Цитата
Hugo написал: set delra = nothing
Приогромнейшее спасибо. Вторая часть макроса, на удаления столбцов, заработала.
Что представляет собой это чудо строчка, чтоб я её подписал и на будующее знал. Какую функцию в себе она несет? Она "сбрасывает, очищает" range сторок для удаления из первой части макроса?
Не перестаю удивляться возможностям excel и VBA.
 
Ну да, "сбрасывает" значение объектной переменной, т.к. её нужно собирать заново, и к тому же этот диапазон уже удалён, так что даже и продолжать собирать в union уже по факту не к чему.
Страницы: 1
Наверх