VBA:AutoFilter返回TRUE; 为每个循环击中每个其他单元格

我试图在另一个子内运行下面的子。

我遇到的问题是wRange.AutoFilter(3, "")TRUE填充wRange中的所有单元格,覆盖之前在其中的数据。

只是为了看看它是否能解决TRUE问题,我改变了行If wCell = "" Then If wCell = "True" ,我看到它不会删除每一行,而是每隔一行。


 Sub DeleteBlankRows() Dim wRange As Range Dim wRange2 As Range Dim lastrow As Integer lastrow = Range("A7").End(xlDown).Row Set wRange = Range("$C$7:$C$" & lastrow) wRange = wRange.AutoFilter(3, "") Range("$A$10000").Select Selection.End(xlUp).Select If ActiveCell.Row <> 5 Then Set wRange2 = wRange.SpecialCells(xlCellTypeVisible) For Each wCell In wRange2 If wCell = "" Then wCell.EntireRow.DELETE End If Next wCell End If wRange = wRange.AutoFilter(3) End Sub 

你能明白为什么会这样做吗?

谢谢你的帮助。


PS作为一个方面说明,我原本有Sub DeleteBlankRows(ByRef wRange) ,它没有问题,我没有说什么wRange2是。 这两个Dims都在更大的Sub中表示,但这对我来说没有意义。

如果列C中有问题的单元格实际上是空的,而不是返回“”的公式,则可以使用如下所示的内容:

 Sub DeleteBlankRows() Dim wRange As Range Dim lastrow As Long lastrow = Cells(Rows.Count, "A").End(xlUp).Row If lastrow > 7 Then On Error Resume Next Set wRange = Range("C7:C" & lastrow).SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not wRange Is Nothing Then wRange.EntireRow.Delete ElseIf lastrow = 7 Then If Len(Range("C7").Value) = 0 Then Rows(7).Delete End If End Sub 

当单独删除行时, 始终从下往上工作。 For Each wCell In wRange2中的For Each wCell In wRange2是这样的,你从上到下工作。

无论如何,批量删除行将是首选。

 Sub DeleteBlankRows() Dim wRange As Range Dim lastrow As Long With ActiveSheet '<-set this worksheet erference properly! If .AutoFilterMode Then .AutoFilterMode = False lastrow = .Range("A7").End(xlDown).Row Set wRange = .Range("$A$7:$C$" & lastrow) With wRange .AutoFilter field:=3, Criteria1:="" With .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count) If CBool(Application.Subtotal(103, .Columns(1))) Then .SpecialCells(xlCellTypeVisible).EntireRow.Delete End If End With .AutoFilter field:=3 End With End With End Sub 

根据您的示例代码,我已经离开了自动filter,但清除了filter。

检查单元格中是否有任何信息的更好方法是IsEmpty函数:

 If IsEmpty(cell(1, 1)) = True wCell.EntireRow.DELETE endif