首页 > 解决方案 > 使用 Sheets.delete 时 Excel VBA 索引超出范围

问题描述

在以下代码的几次迭代之后,我总是得到索引超出范围的错误。

    For i = myworksheet.index To Worksheets.count
        Sheets(i).delete
    Next i

标签: excelvbaindexing

解决方案


您不应该以这种方式删除工作表。

考虑一下你要求它做什么。假设您有 5 个工作表 - Sheet1、Sheet2 .. Sheet 5。

在此处输入图像描述

假设myworksheet是 Sheet3 ( i=3)。

循环开始时,i为 3。

Sheet3被删除。

在此处输入图像描述

循环重新开始,i现在是 4。

但是,现在只有 4 个工作表。所以Sheet5( i=4) 被删除。

在此处输入图像描述

循环重新开始,i现在是 5。

但是,现在只有 3 个工作表。没有要删除的索引为 5 的工作表。


实现目标的一种(多种)方法是执行以下操作:

i = myworksheet.Index

Do Until Worksheets.Count = i - 1
    Worksheets(Worksheets.Count).Delete
Loop

需要指出的一件事..在您的代码中,您似乎正在删除 start sheet myworksheet。正因为如此,Do Until...我创建的循环在 i-1 结束后停止, myworksheet被删除。如果您不希望发生这种情况,请删除- 1. 如果您确实希望发生这种情况,则需要注意,如果索引myworksheet为 1,它将出错 - 因为所有工作簿必须至少包含 1 个工作表。


推荐阅读