根据范围删除行可能的错误
Delete rows based on range possible mistake
我正在尝试根据另一个工作表中的范围删除一个工作表中的行。根据我有限的 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
我收到一条消息说 "Application-defined or object-defined error"。
谁能告诉我我做错了什么?或者,如果这只是一种愚蠢的方式,我应该以不同的方式来做?
请查看以下内容是否适合您:
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
注意到它没有经过微调,旨在让您了解如何处理解决方案。
我添加了代码来减少 i。我想我明白代码无法告诉我指定哪个工作表来删除行,但我不确定该怎么做。我尝试将 "Rows(i).EntireRow.Delete" 更改为 "Sheets("test").Rows(i).EntireRow.Delete" 但我不确定这样做是否正确。
一些额外的细节使事情更清楚:
Sheet "test" 在 A 列中有大约 1000 行具有唯一编号。Sheet "Limited Elements" 在 A 列中有大约 100 行具有唯一编号。我想要它删除 "test" 中 A 列中的值与 "Limited Elements".
中的 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)。现在我已经解决了这个问题,但它给了我一个类型不匹配错误,我认为这是由于将单个单元格与一个范围进行比较造成的。
此时我想我迷路了。我不知道如何改变它,让它工作并做我想做的事。
我正在尝试根据另一个工作表中的范围删除一个工作表中的行。根据我有限的 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
我收到一条消息说 "Application-defined or object-defined error"。
谁能告诉我我做错了什么?或者,如果这只是一种愚蠢的方式,我应该以不同的方式来做?
请查看以下内容是否适合您:
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
注意到它没有经过微调,旨在让您了解如何处理解决方案。
我添加了代码来减少 i。我想我明白代码无法告诉我指定哪个工作表来删除行,但我不确定该怎么做。我尝试将 "Rows(i).EntireRow.Delete" 更改为 "Sheets("test").Rows(i).EntireRow.Delete" 但我不确定这样做是否正确。
一些额外的细节使事情更清楚:
Sheet "test" 在 A 列中有大约 1000 行具有唯一编号。Sheet "Limited Elements" 在 A 列中有大约 100 行具有唯一编号。我想要它删除 "test" 中 A 列中的值与 "Limited Elements".
中的 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)。现在我已经解决了这个问题,但它给了我一个类型不匹配错误,我认为这是由于将单个单元格与一个范围进行比较造成的。
此时我想我迷路了。我不知道如何改变它,让它工作并做我想做的事。