在工作表创建时复制隐藏表“TEMPLATE”

时间:2016-01-29 14:09:13

标签: excel vba excel-vba

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

我已经要求的代码要求用户在创建时输入工作表的名称,并调用以字母数字方式对当前工作簿的工作表进行排序并重建TOC。有没有办法改变当前的代码以符合它的新目的?注意:此代码位于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”工作表仅适用于此工作簿,不需要在其他工作簿中使用,并且是此工作簿中的隐藏工作表。

2 个答案:

答案 0 :(得分:2)

更新了代码。 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

答案 1 :(得分:1)

您的模板是否已保存到可以为需要的人提供的位置?如果没有,您只需要创建一个宏来格式化模板。

如果您准备好模板,则只需要该文件的完整路径。我会关闭application.screenupdating = false并打开该文件,复制您想要的工作表并将其粘贴到您当前的文档中,然后关闭模板文件并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

这将有效,您只需要更改模板路径