我正在尝试比较两个工作表(Sheet1和Sheet2)之间的单元格值,以查看它们是否匹配,如果匹配,则将Sheet1中的匹配值移动到预先存在的列表中(Sheet3),然后删除Sheet1中的值。
我在Excel VBA中使用反向For循环,但是一切都正常,直到我开始使用
这会在VBA中引发“424”对象所需的错误,我已经花了几个小时来解决这个问题,我不确定为什么会出现这种情况。我是否选择了错误的行或对象?
如果有人能指导我正确的方向,我将不胜感激。
以下是我的代码:
注:本文中的HTML标签已保留。
我在Excel VBA中使用反向For循环,但是一切都正常,直到我开始使用
newrange1.EntireRow.Delete
删除行的部分。这会在VBA中引发“424”对象所需的错误,我已经花了几个小时来解决这个问题,我不确定为什么会出现这种情况。我是否选择了错误的行或对象?
如果有人能指导我正确的方向,我将不胜感激。
以下是我的代码:
Sub Step2()
Sheets("Sheet1").Activate
Dim counter As Long, unsubListCount As Long, z As Long, x As Long, startRow As Long
counter = 0
startRow = 2
z = 0
x = 0
' Count Sheet3 Entries
unsubListCount = Worksheets("Sheet3").UsedRange.Rows.Count
Dim rng1 As Range, rng2 As Range, cell1 As Range, cell2 As Range, newrange1 As Range
' Select all emails in Sheet1 and Sheet2 (exclude first row)
Set rng1 = Worksheets("Sheet1").Range("D1:D" & Worksheets("Sheet1").UsedRange.Rows.Count)
Set rng2 = Worksheets("Sheet2").Range("D1:D" & Worksheets("Sheet2").UsedRange.Rows.Count)
' Brute Loop through each Sheet1 row to check with Sheet2
For z = rng1.Count To startRow Step -1
'Cells(z, 4)
Set cell1 = Worksheets("Sheet1").Cells(z, "D")
For x = rng2.Count To startRow Step -1
Set cell2 = Worksheets("Sheet2").Cells(x, "D")
If cell1.Value = cell2.Value Then ' If rng1 and rng2 emails match
counter = counter + 1
Set newrange1 = Worksheets("Sheet1").Rows(cell1.Row)
newrange1.Copy Destination:=Worksheets("Sheet3").Range("A" & unsubListCount + counter)
newrange1.EntireRow.Delete
End If
Next
Next
End Sub
我遇到的错误如下图所示:
注:本文中的HTML标签已保留。
Application.Match
会更好。 - user4039065Set cell1 = Nothing
和Set newrange1 = Nothing
。 - Ralph.EntireRow.Delete
之前,可以在立即窗口中检查? newrange1.Address
。 https://www.excelcampus.com/vba/vba-immediate-window-excel/ - RalphMsgbox newrange1.Address
会返回“$13:$13”。这是一个有效的地址,对吧? - Kyle Yeonewrange1
设置为Nothing
,然后将cell1
重置为下一个单元格。谢谢大家! - Kyle Yeo