更快的方法删除多个工作表
我有一个工作簿与多个工作表,其中大多数是每次我运行一个特定的macros时被删除。 要删除的工作表数量在1到150之间变化。
目前macros下面的部分大约需要215秒来删除78个工作表。 有什么办法可以让它更快? 对于相似数量的工作表,less于60s的运行时间?
这是代码的相关部分:
For Each WrkSh In MainFile.Worksheets If WrkSh.Index > 5 Then WrkSh.Delete End If Next WrkSh MainFile.Sheets("Input").Unprotect MainFile.Sheets("Buyers").Unprotect MainFile.Sheets("Template").Visible = True MainFile.Sheets("Holidays").Visible = True With MainFile.Sheets("Input") .Range("A10:A200").ClearContents .Range("E11:N200").Clear End With With MainFile.Sheets("Buyers") .Range("A10:B40").ClearContents .Range("C11:J40").Clear End With
编辑:我有这个Application.ScreenUpdating = False
在主代码的开始。
选项1您可以将工作表分组并将其作为一个组删除。 这可能会更快; 你可以testing它。
Dim arrDelete() As String ReDim arrDelete(MainFile.Worksheets.Count) Dim index As Long For Each WrkSh In MainFile.Worksheets If WrkSh.index > 5 Then arrDelete(index) = WrkSh.Name index = index + 1 End If Next WrkSh ReDim Preserve arrDelete(index - 1) Application.DisplayAlerts = False MainFile.Sheets(arrDelete).Delete Application.DisplayAlerts = True
选项2如果您要保留的工作表之外没有链接,可以将这些工作表复制到新的工作簿并删除旧的工作簿。 这可能不是最安全的select,但可能在某些情况下工作。
你在使用Application.ScreenUpdating = False
吗?
你确定这是你的代码的一部分导致问题? 我很快重新创build了你的情况,并且几乎立即运行。
Sub test() Dim a(), sh As Worksheet ReDim a(1 To Sheets.Count - 5) For Each sh In ThisWorkbook.Sheets If sh.Index > 5 Then a(sh.Index - 5) = sh.Name Next sh Sheets(a).Delete End Sub
- 为什么整型variables在VBA Excel中存储string值
- VBA的Excel – 用一个简单的macros来自动填充预算电子表格单元格的问题我试图做
- 如何使用在Mac Excel 2011中自动打开的JavaScript创build符合UTF-8的CVS文件
- 保持运行时错误VBA
- 将公式转换为vba
- Excel VBA事件处理程序
- 如何在Excel中查找单元格的所有依赖项(还有条件格式和数据validation)
- OleDbConnection()在任何打开的Excel窗口中打开一个Excel文件。 但是,如果没有一个窗口打开,
- 如果包含链接到其他工作表的公式的单元格范围输出不同的值,如何触发macros