删除工作表(如果存在)并创建一个新工作表

问题描述 投票:4回答:2

我想查看我的Excel工作表并查找具有特定名称的工作表,并删除该工作表(如果找到)。之后我想在具有该名称的所有现有工作表之后创建工作表。我的代码如下:

For Each ws In Worksheets
    If ws.Name = "asdf" Then
        Application.DisplayAlerts = False
        Sheets("asdf").Delete
        Application.DisplayAlerts = True
        End
    End If
Next

Sheets.Add(After:=Sheets(Sheets.count)).Name = "asdf"

但是,这不会在一次代码运行中执行这两个操作。如果工作表已经存在,它将只删除工作表而不是像我想要的那样制作一个新工作表。我需要再次运行它来创建一个新的。

如何修复我的代码以删除旧工作表(如果存在并创建新工作表)?

excel vba excel-vba
2个回答
7
投票

删除End语句,您的代码在找到并删除工作表asdf后终止。

For Each ws In Worksheets
    If ws.Name = "asdf" Then
        Application.DisplayAlerts = False
        Sheets("asdf").Delete
        Application.DisplayAlerts = True
    End If
Next

Sheets.Add(After:=Sheets(Sheets.count)).Name = "asdf"

9
投票

您可以通过尝试并获取项目来测试集合中项目的存在,而不是通过Worksheets循环:

Function GetWorksheet(shtName As String) As Worksheet
    On Error Resume Next
    Set GetWorksheet = Worksheets(shtName)
End Function

If Not GetWorksheet("asdf") Is Nothing Then
    Application.DisplayAlerts = False
    Worksheets("asdf").Delete
    Application.DisplayAlerts = True
End If
Worksheets.Add(After:=sheets(sheets.Count)).name = "asdf"

但是,最直接的方法是尝试删除包裹在On Error Resume Next - On Error GoTo 0“块”中的工作表:

Application.DisplayAlerts = False
On Error Resume Next
Worksheets("asdf").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Worksheets.Add(After:=sheets(sheets.Count)).name = "asdf"
© www.soinside.com 2019 - 2024. All rights reserved.