Excel VBA 对象在运行时需要错误

标签 excel vba

我对 VBA 很陌生,刚刚开始学习。我这里有一个代码来匹配 Sheet1 和 Sheet3 中“M”列的所有单元格,并删除 Sheet1 中包含 Sheet3 的“M”列中的任何值的所有行。
如果我使用 F8 完成它,我不会收到任何错误,但是当我将它分配给一个按钮时,它会在运行时失败并出现“需要对象”错误。我尝试了一些我在网上找到的东西,但它们似乎都不起作用。
下面是我的代码。任何帮助将非常感激。

Sub DeleteRows()

    Dim rng As Range
    Dim rng2 As Range
    Dim cell As Object
    Dim cell2 As Object

    Set rng = Sheets("Sheet1").Range("M2:M1541")
    Set rng2 = Sheets("Sheet3").Range("M2:M30")

    For Each cell In rng
        For Each cell2 In rng2
            If cell.Value = cell2.Value Then
                cell.EntireRow.Delete
            End If
        Next
    Next
    Application.ScreenUpdating = True

End Sub

提前致谢!

最佳答案

您可以遍历 sheet2 中的单元格并过滤 sheet1 中的这些项目。
那么你就不会双循环了。

Sub Button1_Click()
    Dim ws As Worksheet, sh As Worksheet
    Dim LstRw As Long, Rng As Range, Frng As Range, c As Range, Nrng As Range

    Set ws = Sheets("Sheet2")
    Set sh = Sheets("Sheet1")

    With ws
        LstRw = .Cells(.Rows.Count, "M").End(xlUp).Row
        Set Rng = .Range("M2:M" & LstRw)
    End With

    With sh
        Set Frng = .Range("M2:M" & .Cells(.Rows.Count, "M").End(xlUp).Row)
        For Each c In Rng.Cells
            .Range("M1").AutoFilter Field:=1, Criteria1:=c

            On Error Resume Next
            Set Nrng = Frng.SpecialCells(xlVisible)
            On Error GoTo 0
            If Nrng Is Nothing Then
            Else
                Frng.EntireRow.Delete
            End If
        Next c
        .AutoFilterMode = False
    End With

End Sub

关于Excel VBA 对象在运行时需要错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106663/

相关文章:

vba - 根据总计对数据进行分组

excel - 根据单元格值检索文件路径(将单元格值与目录中的文件名匹配)

excel - COUNTIFS 包括整列而不是单个项目

vba - 使用变量作为引用 VBA

vba - 连接和迭代多个单元格VBA excel

mysql - 如何在EXCEL或SQL中转置动态矩阵数据集

vba - 如何在文件夹中的所有(已关闭)Excel 文件上运行一个 VBA 宏?

vba - 使用静态分析使开发更好

arrays - VBA - 从现有数组有条件地填充数组

vba - 使用 VBA 删除 Excel 中的工作表