2012-03-28 2 views
0

Я вставляю ниже кусок кода, который поднимает только видимые строки и вставляет его на новый лист для некоторой дополнительной обработки. Однако, когда он пытается вставить, он терпит неудачу с ошибкой, что «Excel не может завершить операцию с помощью ресурсов. Пожалуйста, закройте некоторые программы или попробуйте позже». Любая альтернатива этому коду? BTW, это excel 2007.Ошибка Excel VBA при вставке данных на новый лист

Function createSummary() 
    ActiveSheet.Outline.ShowLevels RowLevels:=2 
    Cells.Select 
    Selection.SpecialCells(xlCellTypeVisible).Select 
    Application.CutCopyMode = False 
    Selection.Copy 

    Worksheets.Add().Name = "Summary" 
    ActiveSheet.Paste 
    Cells.Font.Bold = False 

    Columns("A").Insert 
+0

Я havent опубликовал весь код, так как он ничего не делает. – rvphx

+0

Знаете ли вы, как отлаживать код? Если да, то можете ли вы сказать нам, какая строка точно дает ошибку? Также любая причина, почему у вас это как функция function createSummary() ', а не' Sub createSummary() '? –

+0

Я не пробовал свой код, но я не помню, чтобы когда-либо мог что-либо делать между 'Copy' и' Paste'. Я, конечно, не стал бы добавлять и переименовывать листы между ними. –

ответ

2

Не видя своей книги, похоже, что у вас возникают проблемы с памятью.

Вам не нужно выбирать ячейки для работы с ними. Попробуйте что-то вроде этого:

With ActiveSheet 
    .Outline.ShowLevels RowLevels:=2 
    .UsedRange.SpecialCells(xlCellTypeVisible).Copy Worksheets.Add().[A1] 
End With 

With ActiveSheet 
    .Name = "Summary" 
    .UsedRange.Cells.Font.Bold = False 
    .Columns("A").Insert 
End With 
+0

+1. очень элегантный и эффективный –

+1

@iDevelop - Спасибо. Rajiv, вам нужно будет добавить обработку ошибок для метода specialcells, а также проверить, что листок с именем summary уже не существует до его выполнения. – Reafidy

+0

Отлично! Это работает как прелесть, и я ушел с ошибкой. Большое спасибо @Reafidy – rvphx

Смежные вопросы