我创建了一个小代码来从 2 个单独的工作表和以字母 N 开头的工作表中删除一系列单元格,但我的代码总是给我错误或 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
添加一些代码问题
清除内容 问题
你写了
I want to delete the range from A4 until the right down corner of AY4
现在取决于“AY4 的右下角”的意图
它应该是 AY 列上的最后一个非空值,然后使用:
With ThisWorkbook.Worksheets("Sheet001")
.Range("A4", .Cells(.Rows.Count, "AY").End(xlUp)).ClearContents
End With
您可能需要更多代码来处理“AY”列中的第一个非空单元格位于第 4 行上方的情况
工作表删除
您可能想尝试“数组”方法来利用
Item
的数组风格。 Worksheets
的属性(property)收集并一次性删除工作表: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
关于vba - 尝试删除 VBA 中的单元格范围时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39160432/