应对工作表而不激活它

我想在工作簿的末尾复制一个工作表,而不会激活它。

我使用此代码复制我的“模板”表末尾:

ThisWorkbook.Sheets("Template").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 

但是,然后我的新表“模板(2)”成为活动表。 即使在复制之后,我仍想继续使用“模板”。

可能吗 ?

可能吗?

不是。 .Copy激活新的工作表,就是这样。 然而,在以下情况之后,没有任何东西阻止你(重新)

 With ThisWorkbook.Worksheets("Template") .Copy after:=ThisWorkbook.Workheets(ThisWorkbook.Worksheets.Count) .Activate End With 

注意我在这里使用Worksheets集合。 Sheets集合可以包含非工作表对象,例如Chart表,这通常不是您正在查找的内容 – Worksheest集合仅包含实际的Worksheet对象。

请注意,在每次需要使用ThisWorkbook.Worksheets集合中find您的模板不是必需的,并且使您的代码比需要更脆弱。

每个Excel对象(实际上是VBA对象)都有一个(Name)属性(在Name属性的顶部,指的是工作表被标记为的),你可以在属性窗格中编辑(在编辑器中按F4 ) – 这个名字必须是一个合法的VBA标识符,而VBA用它做什么是非常漂亮的:它用这个名字声明一个全局范围的对象variables,所以如果你命名你的“模板”表TemplateSheet ,那么你可以这样做:

 With TemplateSheet .Copy after:=ThisWorkbook.Workheets(ThisWorkbook.Worksheets.Count) .Activate End With 

对于每个“静态”工作表(即不是由代码生成的工作表)等等。 通过引用工作表的Name属性(选项卡标签),只要用户决定将选项卡命名为其他名称,代码就会失败。 通过引用相应的全局范围标识符,您可以随意标记工作表选项卡,代码根本不在乎。