Получить дескриптор на последнем листе, скопированном Worksheet.Copy - PullRequest
3 голосов
/ 08 августа 2009

Я пытаюсь получить дескриптор к рабочему листу, который был создан операцией копирования. следующий код, используемый для работы:

Dim wsTempl As Worksheet, pageCount as Long
Set wsTempl = Sheets("Template")
For pageCount = 1 To 5
   wsTempl.Copy After:=Sheets(Sheets.Count)
   Set ws = Sheets(Sheets.Count)
   ws.Name = "p" & pageCount 
Next

Но остановился при добавлении листов VeryHidden в рабочую книгу. теперь мои Sheets (Sheets.Count) получают лист VeryHidden вместо листа, который я добавил последним.

Конечно, я мог бы использовать

Set ws = Sheets(wsTempl.Name & " (2)")
ws.Name = "p" & pageCount

Но это кажется таким уродливым, разве это единственный путь? Может кто-нибудь придумать другой путь?

, чтобы повторить проблему:

  1. Откройте новую книгу, назовите первый лист «Шаблон» и удалите остальные листы
  2. alt-f11 - вставьте модуль кода и вставьте указанный выше код
  3. F5 должен показать вам, что он работает.
  4. вставить лист, используя вкладки листа, перетащить его в конец коллекции
  5. установить значение VeryHidden в VBA IDE
  6. F5 снова, первый листинг кода должен завершиться ошибкой

Причина в том, что Copy After: = не копируется после VeryHidden Sheets, поэтому часть кода для переименования листа всегда переименовывает VeryHidden Sheet

1 Ответ

4 голосов
/ 08 августа 2009

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


Dim wsTempl As Worksheet, i as int
Set wsTempl = Sheets("Template")
For i = 1 To 5
   wsTempl.Copy After:=Sheets(Sheets.Count)
   Set ws = ThisWorkbook.ActiveSheet
   ws.Name = "p" & pageCount 
Next

...