VBA删除活动工作表

3

我正在尝试创建一个宏,可以删除活动工作表而不显示提示。以下代码可以实现这一功能...但是到了最后一张工作表就无法正常工作,无论如何都会出现提示。我不想删除最后一张工作表,同时也不希望出现"1004"错误信息。是否有办法修改以上代码,在不删除最后一张工作表的情况下,同时也不显示错误提示信息?

Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True

继续忽略错误 - Mech
4个回答

1
如果想要删除的是ActiveSheet,并且只有它一个工作表的话,这个方法是可行的,但前提是工作簿中只有1个工作表。
Sub DeleteActiveSheet()

    If ThisWorkbook.Worksheets.Count = 1 Then
        Exit Sub
    Else
        Application.DisplayAlerts = False
        ThisWorkbook.ActiveSheet.Delete
        Application.DisplayAlerts = True
    End If

End Sub

如果想要删除除最后一个外的所有工作表,请按照以下顺序进行操作:

  • 从工作簿中设置一个工作表变量wksToStay,类型为Worksheet,并将其设置为最后一个工作表;
  • 从最后一个工作表开始,循环遍历Workbook.Worksheets集合中的所有Worksheets
  • 始终检查要删除的工作表wksToDelete是否与wksToStay具有相同的名称;
  • 如果名称不相同,则删除该工作表;
  • 这将删除所有工作表,包括隐藏和非常隐藏的工作表

Sub DeleteAllButLast()

    Dim wksToStay As Worksheet
    Dim wksToDelete As Worksheet
    Dim i As Long

    Set wksToStay = ThisWorkbook.Worksheets(Worksheets.Count)

    For i = Worksheets.Count To 1 Step -1
        Set wksToDelete = ThisWorkbook.Worksheets(i)
        If wksToDelete.Name <> wksToStay.Name Then
            Application.DisplayAlerts = False
            wksToDelete.Delete
            Application.DisplayAlerts = True
        End If
    Next

End Sub

-1

请测试以下代码:

Sub deleteExceptTheLastSh()
    If ActiveWorkbook.Sheets.count > 1 Then
        Application.DisplayAlerts = False
         ActiveSheet.Delete
        Application.DisplayAlerts = True
    Else
        MsgBox "This is the last sheet and it cannot be deleted!"
    End If
End Sub

我的代码有什么问题,与要提问的问题相悖?我是在向那些不理解代码和上下文就投票赞成的人发表意见。消息框只是一个额外的奖励,如果不需要的话可以很容易地删除... - FaneDuru

-1
这是因为您无法删除工作簿中的最后一个工作表。您执行的宏是否与按钮相关?如果您不喜欢1004消息,可能的解决方案之一是创建自定义错误消息:
Sub deleteActiveSheet()

Application.DisplayAlerts = False

 On Error GoTo Error
    ActiveSheet.Delete

Application.DisplayAlerts = True

Exit Sub
Error:
 MsgBox "you cannot delete the last worksheet in the workbook!"
End Sub

这个方法有效!我只需要在“错误:”命令后面不添加任何内容。 - Brandon Bayles

-3

如果我理解正确的话,你不想删除最后一个工作表,并且想要避免错误提示信息。

你可以尝试这样做:

Sub deleteallbutlast()

    Application.DisplayAlerts = False
        If Worksheets.Count > 1 Then
            ActiveSheet.Delete
        Else
            End
        End If
    Application.DisplayAlerts = True

End Sub

很不幸的是,这仍然在最后一个活动工作表上显示了错误信息。 - Brandon Bayles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接