首页 > 解决方案 > 工作表名称已存在,如何处理错误并删除 Excel 中的默认工作表?

问题描述

使用 sheet1 的名称创建工作表效果很好。但是,如果我再次错误地运行代码,则会出现运行时 1004 错误,因为新创建的工作表名称已经存在。这很好,但是如何处理此错误并防止 Excel 创建一个具有随机名称的默认工作表?

我希望 Excel 到 MsgBox 我有一个重复,然后它应该什么都不做。我知道有类似的线程,但他们没有回答我的问题。谢谢。

Private Sub CreateSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(After:= _
             Worksheets("Sheet1"))

    Application.DisplayAlerts = False

    ws.Name = Sheets("Sheet1").Range("N1")

    On Error Resume Next

    If (Worksheets("ws.Name").Name <> "") Then

    MsgBox ("name already exists, please delete")

    Else

    ws.Visible = xlSheetVisible

    ThisWorkbook.Sheets("Sheet1").Range("A:AB").Copy
    ThisWorkbook.Sheets(ws.Name).Range("A1").PasteSpecial Paste:=xlPasteValues

    End If

End Sub

标签: excelvba

解决方案


在运行工作表创建代码之前,您可以创建一个自定义函数并在代码中对其进行测试,例如...

Public Function SheetExists(WkBkName As String, ShtName As String) As Boolean
    Dim sht As Worksheet
    On Error Resume Next
    Set sht = Application.Workbooks(WkBkName).Worksheets(ShtName)
    On Error GoTo 0
    If sht Is Nothing Then
        SheetExists = False
    Else
        SheetExists = True
    End If
End Function

然后你可以在下面的代码中使用这个 UDF...

Sub Test()
    If SheetExists(ThisWorkbook.Name, "Sheet2") Then
        MsgBox "Sheet Exists!"
    Else
        MsgBox "Sheet Doesn't Exist!"
    End If
End Sub

推荐阅读