Vba 获取由工作表复制的上一个工作表的句柄。复制

Vba 获取由工作表复制的上一个工作表的句柄。复制,vba,excel,excel-2003,Vba,Excel,Excel 2003,我正在尝试获取由复制操作创建的工作表的句柄。以下代码用于工作: 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 但

我正在尝试获取由复制操作创建的工作表的句柄。以下代码用于工作:

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
但在向工作簿添加非常隐藏的工作表时停止。现在我的工作表(Sheets.Count)得到的是非常隐藏的工作表,而不是我上次添加的工作表

我当然可以用

Set ws = Sheets(wsTempl.Name & " (2)")
ws.Name = "p" & pageCount
但这看起来很难看,这真的是唯一的办法吗?有人能想出别的办法吗

要复制此问题,请执行以下操作:

  • 打开新工作簿,将第一张工作表命名为“模板”&删除其他工作表
  • alt-f11-插入代码模块并粘贴上述代码
  • F5应该向您展示它的工作原理
  • 插入工作表,使用工作表选项卡将其拖动到集合的末尾
  • 在VBA IDE中将其设置为VeryHidden
  • F5同样,第一个代码列表应该失败

  • 原因似乎是Copy After:=不会在VeryHidden sheet之后复制,因此重命名工作表的代码部分总是重命名VeryHidden sheet

    工作表的复制方法使新创建的工作表处于活动状态,因此您应该能够做到这一点

    
    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
    
    

    要打破第二个代码列表,只需将模板命名为:“模板(3)”并更新代码。副本现在将创建“模板(4)”&代码已断开。好的,好的,我们可以保留一个规则,我们应该将模板命名为“模板(x)”,x>1。我的意思是:“…我们可以有一个命名约定,不将模板命名为“模板(x)”,x>1”。同时确保在运行之间删除额外的工作表,否则它将失败,因为工作表已经存在。当然,它就在我面前:如何捕获通过在Excel VBA中复制/粘贴添加的工作表-也指出了这一点。然而,我并没有想过这样做。你的建议是我认为最好的方法。非常感谢。