Sub main()
Dim count As Integer
Dim i As Integer
count = Range("Q" & Rows.count).End(xlUp).Row
MsgBox count
For i = 2 To count
If Cells(i, "Q").Value = 2 Then
Sheets(1).Rows(i).EntireRow.Delete
End If
Next i
End Sub
为什么代码不能正常工作?当我在excel中执行上面的VBA代码时,它会删除一些行,然后退出并显示以下消息:
run time error 13
这是什么意思?有时我收到这条消息:
type mismatch
在上面的VBA代码中,我想删除Q
列值为2但行不通的行。你能告诉我这个bug的位置吗?
让我告诉你发生了什么。代码正在运行,但它正在删除一些行并因运行时错误13而中止。当我打开我的EXCEL文件以查看Q列时,我观察到的是Q列的某些行有#REF!
。
我认为这可能是原因,但我该如何克服它?如何让我的代码正常工作?我有一个Q列,其中包含1,2个值。必须删除其中包含2列的Q列,我的意思是整行。
答案 0 :(得分:2)
如果第10行== 2,则删除第10行;在循环的下一次迭代中,您检查第11行,它现在具有行#12的值,因为它在删除后向上移动,这意味着您跳过查看已删除行下的任何行。
你可能想要倒退;
Sub main()
Dim count As Integer
Dim i As Integer
'//assuming all filled rows from Q2 downwards?
count = Range("Q2").End(xlDown).Row
For i = count To 2 Step -1
If Cells(i, "Q").Value = 2 Then
Sheets(1).Rows(i).EntireRow.Delete
End If
Next i
End Sub
答案 1 :(得分:1)
在大型工作表中循环遍历每一行可能非常耗时。尝试使用find方法。也请关闭screenupdating。
Sub HTH()
Dim rCell As Range
Dim strAddress As String
Application.ScreenUpdating = False
With ActiveSheet.Columns("Q")
Set rCell = .Find(What:=2, LookIn:=xlValues, SearchOrder:=xlByColumns)
If Not rCell Is Nothing Then
Do
strAddress = rCell.Address
rCell.EntireRow.Delete
Set rCell = .FindNext(Range(strAddress))
Loop Until rCell Is Nothing
End If
End With
Application.ScreenUpdating = True
End Sub