运行时错误“1004”? Excel VBA

我的代码有问题。 我试图过滤范围排除列K中的值等于“三月”,并删除这些行的行。 因此除了“March”之外的所有行都将被显示。 该代码运行良好,当它试图删除。 .Offset(1, 0).SpecialCells....它给我运行时错误1004

 Public Sub RemoveRows() Dim ws As Worksheet Dim strSearch As String Dim lRow As Long strSearch = "March" Set ws = Sheets("January") With ws lRow = .Range("B" & .Rows.Count).End(xlUp).Row '~~> Remove any filters .AutoFilterMode = False '~~> Filter, offset(to exclude headers) and delete visible rows With .Range("K1:K" & lRow) .AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*" .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete End With '~~> Remove any filters .AutoFilterMode = False End With End Sub 

你必须在你的Range语句上放

 Public Sub RemoveRows() Dim ws As Worksheet Dim strSearch As String Dim lRow As Long strSearch = "March" Set ws = Sheets("January") With ws lRow = .Range("B" & .Rows.Count).End(xlUp).Row '~~> Remove any filters .AutoFilterMode = False '~~> Filter, offset(to exclude headers) and delete visible rows .Range("K1:K" & lRow).AutoFilter Field:=1, Criteria1:=strSearch .Range("K2:K" & lRow).Cells.SpecialCells(xlCellTypeVisible).EntireRow.Delete '~~> Remove any filters .AutoFilterMode = False End With End Sub 

.offset()不需要,只需从K2开始;
内部With语句不是必需的。

您不需要查找.SpecialCells(xlCellTypeVisible) 。 只要抵消一行来保存您的标题并删除。

 .Offset(1, 0).EntireRow.Delete 

只有可见的.AutoFilter行才会被删除。 您可能希望检查是否存在要使用Application.Subtotal(103, ...)删除的行,以便在没有任何要删除的行时尝试删除行,这可能会导致绕过.AutoFilter并删除所有数据。 。