如何解决使用Sheets.delete时Excel VBA索引超出范围
在下面的代码进行几次迭代之后,我总是得到索引超出范围的错误。
For i = myworksheet.index To Worksheets.count
Sheets(i).delete
Next i
解决方法
您不应以这种方式删除工作表。
考虑您要执行的操作。假设您有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
需要指出的一件事..在您的代码中,您似乎正在删除起始表myworksheet
。因此,我创建的Do Until...
循环在i-1处完成,以在删除{strong> myworksheet
之后停止 。如果您不希望这种情况发生,请删除- 1
。如果您确实希望发生这种情况,则需要注意的是,myworksheet
的索引为1时,它将出错-因为所有工作簿必须至少包含1个工作表。
请尝试另一种方法。在您的代码中,删除工作表后,对于i
而言,该引用对现有最大(剩余)最大的Sub deleteSheets()
Dim sh As Worksheet,ws As Worksheet
Set sh = ActiveSheet
For Each ws In ActiveWorkbook.Sheets
If ws.Index > sh.Index Then
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
End If
Next
End Sub
无效:
Sub deleteSheetsBis()
Dim myworksheet As Worksheet,i As Long
Set myworksheet = ActiveSheet
For i = ActiveWorkbook.Worksheets.count To myworksheet.Index Step -1
Application.DisplayAlerts = False
Sheets(i).Delete
Application.DisplayAlerts = True
Next i
End Sub
或者像@SJR建议的那样向后循环:
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Rectangle {
id: toolbar
color: "green"
anchors.centerIn: parent
height: 100
width: parent.width
Rectangle {
id: toolbutton1
height: parent.height
anchors {
right: toolbutton2.left
margins: 20
}
width: 100
color: "blue"
}
Rectangle {
id: toolbutton2
height: parent.height
anchors {
right: parent.horizontalCenter
margins: 10
}
width: 100
color: "magenta"
}
Rectangle {
id: toolbutton3
height: parent.height
anchors {
left: parent.horizontalCenter
margins: 10
}
width: 100
color: "red"
}
Rectangle {
id: toolbutton4
height: parent.height
anchors {
left: toolbutton3.right
margins: 20
}
width: 100
color: "yellow"
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。