错误尝试删除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