【问题标题】:Delete rows based on range possible mistake根据范围可能的错误删除行
【发布时间】:2015-07-06 15:10:12
【问题描述】:

我正在尝试根据另一个工作表中的范围删除一个工作表上的行。根据我有限的 VBA 经验,我认为这里的问题可能很简单。这是我写的代码:

Sub LimitedElements()

imax = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

For i = 2 To imax
    If Sheets("test").Cells(j, 1).Value = Sheets("Limited Elements").Range("A1:A10") Then
    Rows(i).EntireRow.Delete
    End If
Next i

End Sub

我收到一条消息“应用程序定义或对象定义错误”。

谁能告诉我我做错了什么?或者,如果这只是一种愚蠢的做法,我应该采取不同的做法?

【问题讨论】:

  • 删除行后必须减少'i',否则可能会跳过一些行
  • 我建议您在删除时向后循环遍历您的范围(对于 i = imax 到 2 步 -1),否则您最终会得到意想不到的结果。
  • 你说的倒循环是对的。我的新代码似乎一直在运行,直到改变方向。我将不得不考虑为什么会这样。

标签: vba excel range rows delete-row


【解决方案1】:

请查看以下是否适合您:

Sub LimitedElements()  
Dim imax As Integer  
Dim a As Variant  
Dim b As Range  
Dim c As Object  
Dim d As Integer  

imax = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

For i = 2 To imax  
a = Sheets("test").Cells(i, 1).Value  
Set b = Sheets("Limited Elements").Range("A1:A10")  
Set c = b.Find(What:=a, LookIn:=xlValues)  

If Not c Is Nothing Then  
    Sheets("test").Rows(i).EntireRow.Delete  
    i = i - 1  
    imax = imax - 1  
    End If  
Next i  
End Sub  

请注意,它没有经过微调,旨在让您了解如何处理解决方案。

【讨论】:

  • 谢谢。这就是我一直在寻找的。我确信我可以从那里开始工作。
【解决方案2】:

我添加了减少 i 的代码。我想我明白代码无法告诉我指定哪个工作表来删除行,但我不确定该怎么做。我尝试将 "Rows(i).EntireRow.Delete" 更改为 "Sheets("test").Rows(i).EntireRow.Delete" 但我不确定这样做是否正确。

一些额外的细节让事情更清楚:

工作表“测试”在 A 列中有大约 1000 行具有唯一编号。工作表“有限元素”有大约 100 行具有唯一编号列 A。我希望它删除“测试”中在 A 列中具有值的行与“有限元素”中的 A 列值匹配。

Sub LimitedElements()
imax = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

For i = 2 To imax

    If Sheets("test").Cells(i, 1).Value = Sheets("Limited Elements").Range("A1:A10") Then
    Sheets("test").Rows(i).EntireRow.Delete
    i = i - 1
    imax = imax - 1
    End If

Next i

End Sub

我认为最初的问题是我有 Cells(j,1) 而不是 cells(i,1)。现在我已经解决了这个问题,但它给了我一个类型不匹配的错误,我认为这是由于将单个单元格与一个范围进行了比较。

在这一点上,我想我只是迷路了。我不知道如何改变它,让它工作并做我想做的事。

【讨论】:

  • 在您的问题中查看我的评论。这是一种比在循环中修改变量 (IMO) 更简洁的方法。
猜你喜欢
  • 1970-01-01
  • 2014-11-04
  • 2020-06-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多