在工作表创build复制隐藏表“模板”

使用Excel 2013macros我希望能够在工作表创build(“+”号或右键单击新工作表),而不是创build一个新的工作表,而是复制一个隐藏的“模板”工作表,而不是作为这个工作簿的模板。 最初将会创build许多工作表,并且随着时间的推移,这个工作簿将每天使用,同时也可能打开其他工作簿。

我已经要求用户在创build时input工作表的名称,并调用当前工作簿的工作表进行字母数字sorting并重buildTOC。 有没有办法改变当前的代码来匹配它的新目的? 注意:此代码位于ThisWorkbook中。

Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim sName As String Dim bValidName As Boolean Dim i As Long bValidName = False Do While bValidName = False sName = InputBox("Please name this new worksheet:", "New Sheet Name", Sh.Name) If Len(sName) > 0 Then For i = 1 To 7 sName = Replace(sName, Mid(":\/?*[]", i, 1), " ") Next i sName = Trim(Left(WorksheetFunction.Trim(sName), 31)) If Not Evaluate("ISREF('" & sName & "'!A1)") Then bValidName = True End If Loop Sh.Name = sName Call Sort_Active_Book Call Rebuild_TOC End Sub 

编辑1:注意:“TEMPLATE”工作表仅适用于此工作簿,不需要在其他工作簿中使用,并且是此工作簿中的隐藏工作表。

更新的代码。 GSerg是正确的:

 Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim wb as Workbook Dim wsTemp as Worksheet Dim sName As String Dim bValidName As Boolean Dim i As Long bValidName = False Do While bValidName = False sName = InputBox("Please name this new worksheet:", "New Sheet Name", Sh.Name) If Len(sName) > 0 Then For i = 1 To 7 sName = Replace(sName, Mid(":\/?*[]", i, 1), " ") Next i sName = Trim(Left(WorksheetFunction.Trim(sName), 31)) If Not Evaluate("ISREF('" & sName & "'!A1)") Then bValidName = True End If Loop With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False End With Set wb = ThisWorkbook Set wsTemp = wb.Sheets("TEMPLATE") wsTemp.Visible = xlSheetVisible wsTemp.Copy After:=wb.Sheets(wb.Sheets.Count) ActiveSheet.Name = sName Sh.Delete wsTemp.Visible = xlSheetHidden 'Or xlSheetVeryHidden With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True End With Call Sort_Active_Book Call Rebuild_TOC End Sub 

您的模板是否可以保存到您需要的位置? 如果没有,你只需要创build一个macros来格式化一个模板。

如果你有一个模板,你只需要该文件的完整path。 我将closuresapplication.screenupdating = false并打开该文件,复制所需的工作表并将其粘贴到当前的文档,然后closures模板文件和application.screenupdating = true

编辑:

 Application.ScreenUpdating = False Application.DisplayAlerts = False Sheets("Template").Visible = True sheets("Template").copy after:=Sheets(1) Sheets("Template").Visible = False ActiveSheet.Name = sName Sheets(Sh.Name).Delete Application.ScreenUpdating = True Application.DisplayAlerts = True 

这将工作,你只需要改变模板path