Почему копирование листа из надстройки Excel в ActiveWorkbook занимает слишком много времени? - PullRequest
0 голосов
/ 07 апреля 2011

В моей надстройке Excel 2007 у меня есть подпрограмма, которая копирует лист из надстройки для пользователей ActiveWorkbook.Когда я запускаю подпрограмму, для выполнения этой строки кода требуется 15-20 секунд:

ThisWorkbook.Sheets(roadwayQuantTemplate).Copy Before:=ActiveWorkbook.Sheets(1)

Эта альтернативная версия имеет такую ​​же задержку:

ThisWorkbook.Sheets(roadwayQuantTemplate).Copy Before:=Worksheets(1)

Есть ли у кого-нибудь идея?почему так долго выполняется эта строка?У меня есть другая подпрограмма, которая добавляет пустой лист (а затем изменяет его) и следующая строка кода выполняет без задержки:

ActiveWorkbook.Worksheets.Add Before:=Worksheets(1)

Если метод Copy действительно займет намного больше времени, чем выполнениеAdd метод?В шаблонном листе, который я копирую, содержится не так много данных, только несколько ячеек, составляющих заголовок листа, и менее 100 пустых ячеек с примененным форматированием.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Может быть быстрее использовать автономный шаблон, чем лист внутри надстройки.Синтаксис:

Worksheets.Add (Тип: = TemplatePathAndFileName)

0 голосов
/ 07 апреля 2011

wild догадка ...

копия листа скопирует код VBA, прикрепленный к этому листу, поэтому, если, например, на вашем листе был следующий код (или любой другой код, который может сработать при копировании), тогда вы 'увидите задержку:

Private Sub Worksheet_Activate()
Dim i As Long
For i = 1 To 100000
    Debug.Print "hello again"
Next i
End Sub

При копировании листа также выбираются формат, рисунки, диаграммы и т. д. Если требуются только значения ячеек, быстрее всего назначить Worksheet.UsedRange рабочего листа массиву вариантов изатем присвойте этот массив заданному диапазону на новом листе (тех же размеров).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...