使用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”工作表仅适用于此工作簿,不需要在其他工作簿中使用,并且是此工作簿中的隐藏工作表。
答案 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
这将有效,您只需要更改模板路径