VBA – 复制模板工作表并用用户input的文本重新命名

VBA新手 – 我已经梳理了interwebs,似乎无法得到这个工作,这让我难住。

我希望在表单上有一个button,允许用户在“模板”右侧的同一工作簿中生成工作表“模板”的副本。 我已经足够了,我可以生成一个副本,将其自身重命名为模板(2)或者生成一个空白的工作表,命名为在提示中input的文本,但我不能这样做。

如下所示 – 它当前返回“Object Required”错误。 在此先感谢您的帮助,非常感谢!

Private Sub NewSheet() Dim NewSheet As Worksheet Dim newName As String Do newName = Application.InputBox("What do you want to name the new sheet?", Type:=2) If newName = "False" Then Exit Sub: Rem cancel pressed Set NewSheet = ThisWorkbook.Worksheets("Template").Copy(After:=Worksheets("Template")) On Error Resume Next NewSheet.Name = newName newName = Error On Error GoTo 0 If newName <> vbNullString Then Application.DisplayAlerts = False NewSheet.Delete Application.DisplayAlerts = True MsgBox newName End If Loop Until newName = vbNullString End Sub 

或者你可以试试这个:

 Sub Test() Dim wb As Workbook: Set wb = ThisWorkbook Dim ws As Worksheet: Set ws = wb.Sheets("Template") Dim newws As Worksheet, sh As Worksheet, newname Dim query As Long, xst As Boolean, info As String retry: xst = False newname = Application.InputBox("Enter a new sheet name.", info, , , , , , 2) If newname = "False" Then Exit Sub For Each sh In wb.Sheets If sh.Name = newname Then xst = True: Exit For End If Next If Len(newname) = 0 Or xst = True Then info = "Sheet name is invalid. Please retry." GoTo retry End If ws.Copy after:=ws: Set newws = ActiveSheet: newws.Name = newname End Sub 

除非用户取消它,否则将持续询问有效的工作表名称。
要避免删除新添加的工作表,请首先检查名称是否有效。
此外,我不认为你可以一口气复制和分配,因为没有文档说明复制方法返回被复制的对象。 所以你先复制并使用Activesheet将其分配给一个variables。