我想查看我的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"
但是,这不会在一次代码运行中执行这两个操作。如果工作表已经存在,它将只删除工作表而不是像我想要的那样制作一个新工作表。我需要再次运行它来创建一个新的。
如何修复我的代码以删除旧工作表(如果存在并创建新工作表)?
删除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"
您可以通过尝试并获取项目来测试集合中项目的存在,而不是通过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"