2009-08-08 44 views
3

我試圖獲取由複製操作創建的工作表的句柄。根據用於工作代碼:獲取由Worksheet複製的最後一張工作表上的句柄。複製

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.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再次,第一個代碼列表失效

原因似乎是即複製完成後= =不會在非常隱藏的表格之後複製,因此重命名錶格的代碼部分總是重命名非常隱藏的表格

+0

要打破第二個代碼清單,只需命名您的模板:'Template(3)'並更新您的代碼。現在複製將創建'模板(4)'並且代碼被破壞。好吧,我們可以保留一條規則,我們應該命名我們的模板'Template(x)',其中x> 1 – 2009-08-08 13:01:52

+0

我的意思是:「..我們只是有一個命名約定,不能命名我們的模板'Template(x)' x> 1「 – 2009-08-08 13:06:13

+0

同時確保在運行之間刪除額外的紙張,否則它將失敗,因爲紙張已經存在。 – 2009-08-08 14:22:57

回答

4

工作表的複製方法會使新創建的表格處於活動狀態,因此您應該能夠做這個。


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 

+0

當然,這是正確的在我面前:如何捕獲通過複製/粘貼Excel VBA添加工作表 - 也指出了這一點。但我沒有想到這樣做。你所建議的是我認爲是最好的方法。非常感謝。 – 2009-08-09 05:26:40

相關問題