【问题标题】:VBA Deleting Active SheetVBA删除活动工作表
【发布时间】:2020-02-18 20:27:55
【问题描述】:

我正在尝试创建一个在不显示提示的情况下删除活动工作表的宏。这就是下面的代码所做的......这在最后一张纸之前效果很好。无论如何我都会得到提示。我不想删除最后一张纸,同时我不想出现错误“1004”消息。有没有办法将上面的代码更改为不删除我的最后一张工作表并且不同时显示错误消息?

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

【问题讨论】:

  • 出错时继续下一步

标签: excel vba


【解决方案1】:

如果想法是删除 ActiveSheet 并且只有它,这是可行的,直到工作簿中只有一张工作表: p>

Sub DeleteActiveSheet()

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

End Sub

如果想法是删除所有工作表,但最后一个,然后按照以下顺序:

  • Worksheet 类型中分配一个工作表变量wksToStay 并将其设置为工作簿中的最后一个工作表;
  • 循环遍历Workbook.Worksheets集合中的所有Worksheets,从最后一个开始;
  • 经常检查,要删除的工作表wksToDelete是否与wksToStay同名;
  • 删除,如果名称不同;
  • 它将删除所有工作表,包括hidden and the very hidden ones

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

【讨论】:

    【解决方案2】:

    请测试下一段代码:

    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
    

    【讨论】:

    • 我的代码有什么问题,针对要提出的问题?我正在向不了解代码和上下文的投票者致辞。消息框是一个奖励,如果不希望可以很容易地删除......
    【解决方案3】:

    发生这种情况是因为您无法删除工作簿中的最后一个工作表。你用按钮执行的宏吗?如果您不喜欢 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
    

    【讨论】:

    • 这成功了!我所要做的就是在 Error: 命令之后不添加任何内容。
    【解决方案4】:

    如果我理解正确,您不想删除最后一个工作表,并且希望避免出现错误消息。

    你可以试试这个:

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

    【讨论】:

    • 不幸的是,这仍然在最后一个活动工作表上显示错误消息。
    猜你喜欢
    • 2023-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多