VBA代码:"select rows to delete except headers"(不起作用)



我有以下代码,它应该简单地选择一系列行并删除它们。不幸的是,无论我如何更改范围,它都会删除标题。

我试图更改"rng"参数但没有成功。

感谢您提供的反馈。

Sub delete_rows_range()
'Application.ScreenUpdating = False
Dim rng, Rng_del As Range
Dim leg As Range
Set leg = Worksheets("Sheet1").Range("aB1")
Set rng = Worksheets("Sheet1").Range("b1")
If Worksheets("Sheet1").AutoFilterMode = True Then
Worksheets("Sheet1").AutoFilter.ShowAllData
End If
rng.Select
rng.AutoFilter Field:=2, Criteria1:=leg
'rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.delete
rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Select
Worksheets("Sheet1").AutoFilterMode = False

End Sub

您的问题是您使用单个单元格作为范围。

当您.Offset单个单元格区域时,请使用"xlCelTypeVisible.EntireRow.Delete

Excel 选择工作表上的每个单元格并将其删除。

你真的应该用一个正确定义的范围对象来澄清你的范围。

Dim ws As Worksheet, lRow As Long, rng As Range
Set ws = Worksheets("Sheet1")
lRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
Set rng = ws.Range("A1:AB" & lRow)

但是如果你想用B1作为你的rng你可以替换你的线,rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Select用这条线......

rng.Range(Cells(2, 2), Cells(rng.Rows.Count, 2)).SpecialCells(xlCellTypeVisible).EntireRow.Delete

您正在尝试从单个单元格区域中进行选择。

您应该改为:

Sub delete_rows_range()
'Application.ScreenUpdating = False
Dim rng, Rng_del As Range
Dim leg As Range
Set leg = Worksheets("Sheet1").Range("AB1")
Set rng = Worksheets("Sheet1").Range("B1")
If Worksheets("Sheet1").AutoFilterMode = True Then
        Worksheets("Sheet1").AutoFilter.ShowAllData
End If
rng.Select
rng.AutoFilter Field:=2, Criteria1:=leg
'rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.delete
Worksheets("Sheet1").UsedRange.SpecialCells(xlCellTypeVisible).Rows(2).Select
Worksheets("Sheet1").AutoFilterMode = False

End Sub

最新更新