应对工作表而不激活它
我想在工作簿的末尾复制一个工作表,而不会激活它。
我使用此代码复制我的“模板”表末尾:
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
属性(选项卡标签),只要用户决定将选项卡命名为其他名称,代码就会失败。 通过引用相应的全局范围标识符,您可以随意标记工作表选项卡,代码根本不在乎。