我想在工作簿的末尾复制一个工作表,而不会让它变为活动状态。
我使用此代码在最后复制我的“模板”表:
ThisWorkbook.Sheets("Template").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
然后我的新表“模板(2)”成为活动表。 即使在复制之后我还想继续使用“模板”。
有可能吗?
答案 0 :(得分:1)
有可能吗?
不是。 .Copy
激活新工作表,就是这样。但是,在以下情况之后,没有什么能阻止(重新)激活原始工作表:
With ThisWorkbook.Worksheets("Template")
.Copy after:=ThisWorkbook.Workheets(ThisWorkbook.Worksheets.Count)
.Activate
End With
注意我在这里使用Worksheets
集合。 Sheets
集合可以包含非工作表对象,例如Chart
表单,通常不是您要查找的内容 - Worksheest
集合仅包含实际Worksheet
对象
请注意,每次需要使用时,都需要在ThisWorkbook.Worksheets
集合中查找模板表,并且使您的代码更加虚弱。
每个Excel对象(实际上是VBA对象)都有(Name)
属性(位于Name
属性之上,该属性引用工作表标记为的任何属性),您可以在属性中编辑窗格(在编辑器中按 F4 ) - 该名称必须是合法的VBA标识符,VBA使用它做的非常好:它声明了一个具有该名称的全局范围对象变量,如果您为“模板”表TemplateSheet
命名,那么您可以这样做:
With TemplateSheet
.Copy after:=ThisWorkbook.Workheets(ThisWorkbook.Worksheets.Count)
.Activate
End With
等等每个“静态”工作表(即不是由代码生成的工作表)。通过按Name
属性(选项卡标签)引用工作表,只要用户决定将选项卡命名为其他内容,您的代码就会开始失败。通过引用相应的全局范围标识符,您可以随意标记工作表选项卡,代码根本不关心。