VBA选择/删除除第一个之外的所有工作表

Fat*_*man 3 excel select vba google-sheets

我在删除不必要的纸张时遇到了问题。我查看了不同的论坛并将不同的解决方案混合在一起。
该宏删除工作表(第一张工作表除外)。

Sub wrong()

Dim sht As Object
Application.DisplayAlerts = False
    For Each sht In ActiveWorkbook.Sheets
        If sht.Index <> 1 Then
            sht.Delete
        End If
    Next

End Sub
Run Code Online (Sandbox Code Playgroud)

这个解决方案可以吗?或者可以改进吗?我还尝试直接对对象(工作簿、工作表)执行操作,但每次都失败

Sub*_*eer 5

你的代码没有任何问题。该代码将从 ActiveWorkbook 中删除除第一个工作表之外的所有工作表。

您应该将 sht 声明为 Worksheet,因为您知道该变量引用 Worksheet 对象。

另一点是您正在循环遍历 ActiveWorkbook.Sheets 的所有工作表,这意味着如果运行代码,它将从当前活动的工作簿中删除工作表。

如果循环遍历 ThisWorkbook.Sheets,它将仅从包含此代码的工作簿中删除工作表。

Sub DeleteAllSheetsButFirst()

Dim sht As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    For Each sht In ActiveWorkbook.Sheets
        If sht.Index <> 1 Then
            sht.Delete
        End If
    Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)

上面的代码将根据工作表的索引号(即它们在工作簿中的位置)而不是工作表名称来删除工作表。