Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA Excel自动筛选错误_Vba_Excel - Fatal编程技术网

VBA Excel自动筛选错误

VBA Excel自动筛选错误,vba,excel,Vba,Excel,尝试在vba中自动筛选时出现以下错误: 调用的对象已与其客户端断开连接 所以我要做的是自动过滤,搜索空白,删除行。有人能帮忙吗 我尝试过在线提供的标准解决方案,例如option explicit等,但没有效果 数据: 代码: 由于Worksheets()需要工作表的名称,如“Sheet1”,请使用工作表(1)。 为什么只使用一次就创建变量ws和rng 我运行了这个,它删除了A列中没有数据的行 Private Sub Worksheet_Change() Dim lngLas

尝试在vba中自动筛选时出现以下错误:

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

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

我尝试过在线提供的标准解决方案,例如option explicit等,但没有效果


数据:


代码:

由于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

最后,我从另一个角度重新审视这个问题:

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
Dim i为整数,计数器为整数
i=2
对于计数器=1至lngLastRowD
如果工作表(1)范围(“A2:A”和lngLastRowD.Cells(i)=”和工作表(1)范围(“D2:D”和lngLastRowD.Cells(i)”,则
工作表(1).范围(“A2:A”和lngLastRowD).范围(“A”和i&“:D”和lngLastRowD).选择
选择。删除
转到终点
其他的
i=i+1
调试。打印“i是”&i
如果结束
下一个

下载是一个exe文件,除非您在此处发布代码,否则将被否决。我怀疑主要问题是您正在使用工作表更改事件。这个重要的操作,也改变了工作表,应该只需点击按钮就可以运行。@Steven Martin,它不是exe…因此Portland Runner用同一个工作簿编辑了我的文章。它是exe-你应该在post yourselfHi中包含代码,谢谢你的文章。然而,我仍然得到与您的代码相同的错误。
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