使用复印表

时间:2015-09-19 11:56:12

标签: excel excel-vba vba

此代码用于创建复制的新工作表。

Sub MakeNewSheet()

    Dim ShtName$

    Sheets("New").Copy After:=Sheets(Sheets.Count)

    ShtName = InputBox("Enter Sheet Name")

    Sheets(Sheets.Count).Name = ShtName

    Sheets(ShtName).Visible = True

End Sub

当您看到消息表名称时,如果输入的名称正在复制而没有任何问题。但是,如果点击取消或是空白名称,则会收到此消息。

exampel

如何删除此邮件?显示任何其他消息,如警告!

1 个答案:

答案 0 :(得分:1)

您正在执行的过程正在生成错误。代码创建新工作表的新副本,然后请求输入名称。如果未提供名称或单击取消,则 ShtName 变量将为空,但进程仍会尝试将新创建的工作表重命名为空白工作表.Name property这就是发生错误的地方。您可以使用在复制过程中自动生成的名称保留新复制的工作表,也可以不创建工作表,除非提供名称。

选项1 - 仅在提供名称时才创建工作表。

Sub MakeNewSheet1()

    Dim ShtName$

    On Error GoTo bm_Err_Out
    ShtName = InputBox("Enter Sheet Name")

    If CBool(Len(ShtName)) Then
        Sheets("New").Copy After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = ShtName
        Sheets(ShtName).Visible = True
    End If

    Exit Sub
bm_Err_Out:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    Application.DisplayAlerts = False
    'Sheets(Sheets.Count).Delete
    Application.DisplayAlerts = True
End Sub

选项2 - 创建工作表,但只有在提供名称时才重命名。

Sub MakeNewSheet()
    Dim ShtName$

    On Error GoTo bm_Err_Out
    ShtName = InputBox("Enter Sheet Name")

    Sheets("New").Copy After:=Sheets(Sheets.Count)
    If CBool(Len(ShtName)) Then
        Sheets(Sheets.Count).Name = ShtName
    End If
    Sheets(Sheets.Count).Visible = True

    Exit Sub
bm_Err_Out:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    Application.DisplayAlerts = False
    'Sheets(Sheets.Count).Delete
    Application.DisplayAlerts = True
End Sub