错误尝试删除VBA中的单元格的范围

我已经创build了一个小代码,以从字母N开始的2个单独的工作表和工作表中删除一系列单元格,但是总是我的代码给我错误或Excel崩溃。 ClearContents方法的第一行和第二行代码给我这些错误。

代码执行错误

我的代码:

'clearing ranges ThisWorkbook.Worksheets("Sheet1").range("A4", range("AY4").End(xlDown)).ClearContents ThisWorkbook.Worksheets("Sheet2").range("A3", range("AK3").End(xlDown)).ClearContents 'deleting sheets For Each sh In ThisWorkbook.Worksheets If Left(sh.Name, 1) = "N" Then ThisWorkbook.Worksheets(sh.Name).Delete End If Next sh 

谢谢您的帮助!

编辑ClearContents问题添加一些代码


ClearContents问题

你写了

我想删除A4的范围,直到AY4的右下angular

现在是“AY4”的右下angular,

应该是列AY上的最后一个非空值,然后使用:

 With ThisWorkbook.Worksheets("Sheet001") .Range("A4", .Cells(.Rows.Count, "AY").End(xlUp)).ClearContents End With 

您可能需要更多的代码来处理这种情况,列“AY”中的第一个非空单元格在第4行上方


工作表删除

您可能需要尝试“数组”方法来利用Worksheets集合的Item属性的数组风格 ,并删除一次性表单:

 Option Explicit Sub ws() Dim sh As Worksheet Dim shtsToDelete As String With ThisWorkbook For Each sh In .Worksheets If Left(sh.name, 1) = "N" Then shtsToDelete = shtsToDelete & sh.name & "\" '<-_| store sht names in a string delimiting them with an invalid character for sheet names Next sh If shtsToDelete <> "" Then '<--| if any sheet to be deleted has been found Application.DisplayAlerts = False '<--| disable alerts to prevent popping out of msgbox prompting you to confirm sheets deletion .Worksheets(Split(Left(shtsToDelete, Len(shtsToDelete) - 1), "\")).Delete '<--| delete list-sheets in one shot Application.DisplayAlerts = True '<--| enable alerts back End If End With End Sub 

出现此错误是因为您不允许删除for each循环的当前内部对象。 尝试使用for循环,如下所示:

 For i = ThisWorkbook.Worksheets.Count to 1 Step -1 If Left(ThisWorkbook.Worksheets(i).name, 1) = "N" Then ThisWorkbook.Worksheets(i).Delete End If Next i 

你的范围定义是错误的,在内部的Range方法调用中,你不访问特定工作表的范围,所以它使用默认工作表的范围。 第二个问题:如果你删除了一个集合中的东西,你应该向后循环集合,否则删除操作会导致循环期间的索引更改。

 Dim wsheet1 As Worksheet Dim wsheet2 As Worksheet Set wsheet1 = ThisWorkbook.Worksheets("Sheet1") Set wsheet2 = ThisWorkbook.Worksheets("Sheet2") wsheet1.Columns("A:AY").ClearContents wsheet2.Columns("A:AK").ClearContents For i = ThisWorkbook.Worksheets.Count To 1 Step -1 If Left(ThisWorkbook.Worksheets(i).Name, 1) = "N" Then ThisWorkbook.Worksheets(i).Delete End If Next i