如果选择了代码,我有一张带有列表框的工作表,如果选择了代码,则Excel将数据从工作表(具有相同的代码)复制到报价单中 .
如果我进行更改,请在同一个列表框中选择另一个代码,我需要excel去查找旧数据并在报价单中删除它 .
Public Sub delete_selected_rows()Dim rng1 As Range,rng2 As Range,rngToDel As Range,c As Range Dim lastRow As Long
With Worksheets("Q")
lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
Set rng1 = .Range("B1:B" & lastRow)
End With
Set rng2 = Worksheets("SO").Range("D35")
For Each c In rng1
If Not IsError(Application.Match(c.Value, rng2, 0)) Then
'if value from rng1 is found in rng2 then remember this cell for deleting
If rngToDel Is Nothing Then
Set rngToDel = c
Else
Set rngToDel = Union(rngToDel, c)
End If
End If
Next c
If Not rngToDel Is Nothing Then rngToDel.CurrentRegion.Delete
结束子
如何让CurrentRegion计算删除额外的30行
1 回答
VBA的ISERROR不会捕获由失败的MATCH工作表函数引起的错误 . 您需要以不同方式构造该部分 .
请注意我对rng2的评论 . 会有一些错误吗? SO.D35含有什么?如果它包含一个值字符串,其中一个值可能是您查找MATCH的值是错误的函数 .
您似乎打算将所有要删除的项目都删除,并在最后一次删除它们 . 我__22329_对我迟到了 . 更常见的方法是一次删除一行,就像找到它们一样,因为一旦删除了一行,该行下面的所有行号都会改变 . 您可以在关闭ScreenUpdating的情况下运行整个代码,并在完成所有删除后设置
Application.ScreenUpdating = True
.