Страницы: 1
RSS
Run Time Error 1004 "метод PasteSpecial из класса Range завершен неверно", "application-defined or object-defined error", Не пойму возникновение ошибки
 
Здравствуйте.
Не могу справиться с проблемой (по поиску пошерстил аналогичные темы, в том числе и здесь).

фрагмент кода такой:
Код
Sub ExpSelRev()

a = 1589

b = 2940

c = 1352

S = 1

m = 1

n = 1 

For r = n To n

For k = 0 To m - 1

For i = a + k * c To a + (k + 1) * c - 1 Step S

    If Worksheets(1).Cells(i, 8 ) > 0 _
    Then GoTo Next1
        
    If Worksheets(1).Cells(i, 8 ) = 0 _
    Then
        Worksheets(1).Range(Cells(3173, 8 ), Cells(3173, 844)).Copy
        Worksheets(1).Range(Cells(i, 8 ), Cells(i, 844)).PasteSpecial Paste:=xlPasteFormulas
    
               
    End If
    
    Application.Calculate
    
       
    If Worksheets(2).Cells(7, 876) > 0 _
    Then
        Worksheets(2).Cells(3, 874).Value = Worksheets(2).Cells(3, 873).Value
     
   Else
        Sheets(1).Range(Sheets(1).Cells(i, 8 ), Sheets(1).Cells(i, 844)).ClearContents

    End If
 
Next1:
Next i
суть в максимизации целевой функции (где Worksheets(2).Cells(7, 876) - разница нового  и предыдущего значений целевой функции) через добавление ранее удалённых строк (если после возврата строк она не увеличивается, удаляю опять).
Примерно на 70-й возвращённой и снова удалённой строке выскакивает баг (если ClearContents заменить на копи-пэйст значений ячеек пустой строки или же вообще приравниванием нулю, то ошибка всё равно вылезает, только с другим описанием).
Что совсем непонятно, так это то, что просто перевернул вполне работающий код оптимизации через удаление строк, где ошибка, если и вылезает, то после нескольких сотен или тысяч удалённых и заново возвращённых строк:

Код
Sub ExpSel()

a = 1589

b = 2940

c = 338

S = 79

m = 4

n = 5 

For r = n To n

For k = 0 To m - 1

For i = a + k * c To a + (k + 1) * c - 1 Step S

    If Worksheets(1).Cells(i, 8 ) = 0 _
    Then GoTo Next1
        
    If Worksheets(1).Cells(i, 8) > 0 _
    Then
        Worksheets(1).Range(Cells(i, 8), Cells(i, 844)).ClearContents
                
    End If
    
    Application.Calculate
    
       
    If Worksheets(2).Cells(7, 876) > 0 _
    Then
        Worksheets(2).Cells(3, 874).Value = Worksheets(2).Cells(3, 873).Value


   Else
        Worksheets(1).Range(Cells(3173, 8 ), Cells(3173, 844)).Copy
        Worksheets(1).Range(Cells(i, 8 ), Cells(i, 844)).PasteSpecial Paste:=xlPasteFormulas

    End If
 
Next1:
Next i

буду благодарен за подсказки решения проблемы

 
Вам нужна только подсказка по ошибке или решение проблемы и, возможно, оптимизация кода?

Правила форума: о названии темы, о файле-примере.
Прикрепите пример к первому сообщению. Предложите название темы. Модераторы заменят
 
Решение, конечно же.
Так как понять решительно не могу. Но поскольку первые строчки считает быстро, а потом всё медленнее, предполагаю что-то типа переполнения памяти.
Прикрепить файл?  
 
Что-то непонятно в написанном?
Цитата
vikttur написал: Прикрепите пример к первому сообщению. Предложите название темы. Модераторы заменят
 
Цитата
написал:
Прикрепите пример к первому сообщению.
Всё понятно, только файл весит 180 МБ , а тут, насколько помнится, ограничение примерно в 2 МБ стоит. Порезать, конечно, можно, но не до единиц мегабайт.

Цитата
написал:
Предложите название темы.
а что с названием темы не так?
 
Ограничение - 300 КБ. А ПРИМЕР - не Ваш рабочий тяжеловес, а небольшая демонстрация проблемы.
Цитата
Олег Марков написал: то с названием темы не так?
Если считаете, что все так, спросите у переводчика Google, он переведет ошибку. Но Вам же не это надо!!!
Цитата
Олег Марков написал: Решение, конечно же.
Решение КАКОЙ ЗАДАЧИ?
 
Цитата
написал:
небольшая демонстрация проблемы.
300 кб даже не представляю, как создать.
даже если только пару строчек оставить.
но попробую на выходных.
Насчёт заголовка всё же не пойму. Написал ровно то, что пишет Эксель, уводя макрос в "баг" (там разные варианты ошибки 1004).
 
При решении какой задачи возникает ошибка?

Название темы; Подковывание комара золотыми подковами.
Описание темы: При вкручивании пятого шурупа возникает ошибка "комар не выдержал и скончался"

Неужели так трудно понять?!
Страницы: 1
Читают тему
Наверх