尝试删除VBA中的区域a单元格时出错
我创建了一个小代码,从两个单独的工作表和以字母N开头的工作表中删除一系列单元格,但我的代码总是给我错误或Excel崩溃。ClearContents方法的第一行和第二行代码给出了这些错误 我的代码:尝试删除VBA中的区域a单元格时出错,vba,excel,Vba,Excel,我创建了一个小代码,从两个单独的工作表和以字母N开头的工作表中删除一系列单元格,但我的代码总是给我错误或Excel崩溃。ClearContents方法的第一行和第二行代码给出了这些错误 我的代码: 'clearing ranges ThisWorkbook.Worksheets("Sheet1").range("A4", range("AY4").End(xlDown)).ClearContents ThisWorkbook.Worksheets("Sheet2").range("A3", r
'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
谢谢你的帮助 出现错误是因为不允许为每个循环删除当前
中的对象。尝试使用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
范围定义错误,在内部范围方法调用中,您无法访问特定工作表的范围,因此它使用默认工作表的范围。第二个问题:如果删除集合中的某个内容,则应该在集合上向后循环,因为否则,删除操作会导致索引在循环过程中发生更改
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
编辑为ClearContents
问题添加一些代码
ClearContents问题
你写的
我想删除从A4到AY4右下角的范围
现在,这取决于“AY4的右下角”
如果它是AY列上的最后一个非空值,则使用:
With ThisWorkbook.Worksheets("Sheet001")
.Range("A4", .Cells(.Rows.Count, "AY").End(xlUp)).ClearContents
End With
您可能需要更多的代码来处理“AY”列中的第一个非空单元格位于第4行上方的情况
工作表删除
您可能希望尝试“数组”方法来利用工作表
集合的项
属性的数组风格,并一次性删除工作表:
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
选项显式
副秘书长()
将sh设置为工作表
Dim shtsToDelete作为字符串
使用此工作簿
对于每个sh In.工作表
如果左(sh.name,1)=“N”,则shtsToDelete=shtsToDelete&sh.name&“\”,对每个
循环使用一个来删除图纸对我有效。可能是不同的Excel版本?我在删除当前的“for each”对象时经常出错,所以我尽量避免在for each循环中删除,也许工作表是可以的。@t除非您确切知道for each循环如何处理集合(我不知道)这可能是个好主意。您的代码中有一个名为range
的变量吗?不,我没有一个名为range的变量。不清楚您要清除的范围是什么,但是如果您试图清除第3行和第4行,您可以尝试xlToRight
而不是xlDown
或只是此工作簿。工作表(“Sheet1”)。range("3:4").ClearContents
我想删除A4的范围,直到AY4的右下角仍然崩溃我的excel文件,我将此代码与一个按钮关联。我运行代码时没有for循环,也只有第一张工作表的ClearContents。按下它后,excel没有响应,我必须关闭文件并从范围开始,如果y,它是否工作你用这段代码创建了一个新的excel文件吗?你是否在vba代码中的某个地方设置了Application.screenUpdate=false?我简化了代码(使用列而不是范围)我的代码在这些范围的前两个clearcontents方法中崩溃或响应不好。现在我意识到我的for-each循环不是一个好的实践,但运行良好