Страницы: 1 2 След.
RSS
Макрос работает в одной книге а в другой нет
 
Добрый день уважаемые форумчане! Суть проблемы в мом что, макрос работает в одной книге, а в другой не работает, других макросов там нет, что может мешать работать??? Листы названы правильно. Выдает ошибку: Метод delete из класса range завершен не верно. В другой книге все работает...
Код
Sub Del_Array_SubStr()
    Dim sSubStr As String    'искомое слово или фраза
    Dim lCol As Long    'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
    Dim avArr, lr As Long
    Dim arr
 
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "Запрос параметра", 1))
    If lCol = 0 Then Exit Sub
    Application.ScreenUpdating = 0
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    'заносим в массив значения листа, в котором необходимо удалить строки
    arr = Cells(1, lCol).Resize(lLastRow).Value
    'Получаем с Лист2 значения, которые надо удалить в активном листе
    With Sheets("Лист2") 'Имя листа с диапазоном значений на удаление
        avArr = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
    'удаляем
    Dim rr As Range
    For lr = 1 To UBound(avArr, 1)
        sSubStr = avArr(lr, 1)
        For li = 1 To lLastRow 'цикл с первой строки до конца
            If CStr(arr(li, 1)) = sSubStr Then
                If rr Is Nothing Then
                    Set rr = Cells(li, 1)
                Else
                    Set rr = Union(rr, Cells(li, 1))
                End If
            End If
            DoEvents
        Next li
        DoEvents
    Next lr
    If Not rr Is Nothing Then rr.EntireRow.Delete
    Application.ScreenUpdating = 1
End Sub
 
 
Защита листа, наличие объединенных ячеек...
 
Ничего такого нет...
 
На какой строке кода ошибка?
Согласие есть продукт при полном непротивлении сторон
 
If Not rr Is Nothing Then rr.EntireRow.Delete

Единственное различие между файлами это количество критериев для удаления, в том что работает до 10, а в том что не около 100.
Изменено: BRP - 16.02.2017 14:12:31
 
Надо файл видеть. Что в момент ошибки в переменной rr?
Согласие есть продукт при полном непротивлении сторон
 
Строка говорит: если диапазон для удаления не пустой, то удалить строки.
Удаляемые строки как-то связаны с неудаляемыми. Предположил объединение... нет такого. Пилите, Шура :)
 
Проверить не на чем... Предположение: может в "плохом" файле есть объединённые строки?
 
Мне кажется циклы должны работать не с 1 в конец а с конца в 1. Иначе удаление будет неверным, и не все удалится!
Типа того
Код
'Удаляем ненужные если in_stock = 0
    For I = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
    Application.StatusBar = "Идет процесс создания (удаление позиций отсутствующих в наличии): " + Str(Round(100 * (ActiveSheet.UsedRange.Rows.Count - I) / ActiveSheet.UsedRange.Rows.Count)) + " %"
    If (Cells(I, "G") = 0 Or Cells(I, "B") = "DEL") Then
    Rows(I).Delete
    End If
    Next I
Изменено: skais675 - 16.02.2017 14:21:14
 
skais675, это справедливо, если будем удалять строки поочерёдно.
 
skais675, в этом коде циклы ничего не удаляют. В них формируется диапазон для удаления.  
Согласие есть продукт при полном непротивлении сторон
 
skais675, копируйте код при русской раскладке клавиатуры.
 
skais675 Изменение кода проблемы не решило...
 
Цитата
BRP написал: в том что работает до 10, а в том что не около 100.
В одном и том-же файле наблюдается проблема при разном количестве критериев?
Согласие есть продукт при полном непротивлении сторон
 

Вот же ошибка

Код
Set rr = Union(rr, Cells(li, 1))

не факт что rr в одной строке с Cells(li, 1) - сами объединяете, то что Вам и говорили!

Лучше объясните в чем суть или задача макроса.

Изменено: skais675 - 16.02.2017 14:32:55
 
Что тут без примера гадать? Может просто тупо код не там... где должен быть.
Да и в массив вроде берётся толково, а вот в union как повезёт... Указывайте конкретно чьи cells!
Изменено: Hugo - 16.02.2017 14:34:58
 
skais675, в чём ошибка?
 
Цитата
skais675 написал: Вот же ошибка

Цитата
BRP написал: макрос работает в одной книге, а в другой не работает
Согласие есть продукт при полном непротивлении сторон
 
транслятор не прикалывается, если пишет, что не может удалить - значит не может удалить
воспользуйтесь кодом из сообщения #9 на каком-то значении I получите тоже самое сообщение, посмотрите чему равно I, посмотрите содержимое строки I и поймете почему эту строку не получается удалить
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Сорри беру свои слова обратно!
Но как-то все странно здесь удаляется. Удалять нужно с конца, а здесь вообще непонятно как-то происходит.
 
Цитата
Юрий М написал:
Предположение: может в "плохом" файле есть объединённые строки?
Кто-нибудь сталкивался - мешают объединённые удалению такаим способом?
 
skais675, не удаляется. Вначале в диапазон ЗАПИСЫВАЮТСЯ ячейки. удаляется все гамузом одной строкой (если диапазон не пустой).
 
Sanja В файле в котором мне нужен макрос да, в фале примере нет... НЕ пойму в чем беда.
 
Суть макроса в том что бы удалять строки в которых есть значение из диапазона значений для удаления. То есть макрос удаляет строки по значениям в диапазоне на другом листе.
 
Нам еще долго файл-пример у Вас выпрашивать?
Согласие есть продукт при полном непротивлении сторон
 
Где что непонятно что я написал? :)
 
Файл в котором ошибка приложить не могу так как размер превышает допустимый, а тот что сделал для примера работает...
 
Цитата
BRP написал:
размер превышает допустимый
Про архиваторы слышали? Про файлообменники на крайний случай
Согласие есть продукт при полном непротивлении сторон
 
Вам вариантов предложили. Не подходит. Гадать дальше?
Ну так чего у людей время отнимать? Сами потратьте минут 30-40, Вам же нужно. Составьте ПРИМЕР. Возможно, при подготовке примера сами выясните причину.
 
Думал ошибка из за того что диапазон, в котором нужно удалить строку, не содержит  критерия для удаления . Но нет тогда другая ошибка...
Страницы: 1 2 След.
Читают тему
Наверх