VBA Excel自动筛选错误

时间:2014-03-12 19:02:49

标签: excel vba excel-vba

尝试在vba中自动过滤时出现以下错误:

  

调用的对象已与其客户端断开连接。

所以我要做的是自动过滤,搜索空格并删除行。有人可以帮忙吗?

我尝试过在线提供的标准解决方案,例如选项明确等但无济于事。


数据:

enter image description here


代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lngLastRow As Long
    Dim lngLastRowD As Long

    Application.ScreenUpdating = False

    'Concatenate the Row A and B
    lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row

    Worksheets(1).Range("D2:D" & lngLastRow).Value = Evaluate("=A2:A" & lngLastRow & "&""""&" & "B2:B" & lngLastRow)

    lngLastRowD = Worksheets(1).Cells(Rows.Count, "D").End(xlUp).Row

    Set ws = Worksheets(1)
    Set Rng = Worksheets(1).Range("A2:A" & lngLastRowD)

    With Rng
        .AutoFilter field:=1, Criteria1:=""
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With

    ws.AutoFilterMode = False
    Application.ScreenUpdating = True

    ThisWorkbook.Sheets(1).Range("A2").Select
End Sub

2 个答案:

答案 0 :(得分:0)

由于Worksheets()需要工作表的名称,例如“Sheet1”,因此请使用工作表(1)。 当你只使用一次时,为什么要创建变量ws和rng 我运行了它并删除了A列中没有数据的行。

Private Sub Worksheet_Change()
        Dim lngLastRow As Long
        Dim lngLastRowD As Long

        Application.ScreenUpdating = False

        'Concatenate the Row A and B
        lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row

        sheets(1).Range("D2:D" & lngLastRow).Value = Evaluate("=A2:A" & lngLastRow & "&""""&" & "B2:B" & lngLastRow)

        lngLastRowD = Worksheets(1).Cells(Rows.Count, "D").End(xlUp).Row


        With sheets(1).Range("A2:A" & lngLastRowD)
            .AutoFilter field:=1, Criteria1:=""
            .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With

        sheets(1).AutoFilterMode = False
        Application.ScreenUpdating = True

        Sheets(1).Range("A2").Select
    End Sub

答案 1 :(得分:0)

最后,我从另一个角度恢复了接近问题:

Dim i As Integer, counter As Integer
i = 2

 For counter = 1 To lngLastRowD
If Worksheets(1).Range("A2:A" & lngLastRowD).Cells(i) = "" And Worksheets(1).Range("D2:D" & lngLastRowD).Cells(i) <> "" Then
        Worksheets(1).Range("A2:A" & lngLastRowD).Range("A" & i & ":D" & lngLastRowD).Select
        Selection.Delete
        GoTo TheEND
    Else
        i = i + 1
        Debug.Print "i is " & i
    End If

Next