我有以下代码在L列中查找带有“Record”字样的值,然后将该行复制到单独的工作表中。
我在值#REF的行上遇到类型不匹配错误!发生在L列。
为了完全删除这些行然后继续预期的功能,修改以下内容的最佳方法是什么?
N.B。 LastRow是'Long'变量类型
Sheets("Demand").Rows("1").Copy Sheets("Data").Range("A1")
With Sheets("Demand")
LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
pasteRowIndex = 2
For r = 1 To LastRow
If LCase(.Cells(r, "L").Value) Like LCase("Record*") Then
If UBound(Split(.Cells(r, "L"), ",")) > 0 Then
i = i + 1
ReDim v(1 To i)
v(i) = pasteRowIndex
End If
Sheets("Demand").Rows(r).Copy Sheets("Data").Rows(pasteRowIndex)
pasteRowIndex = pasteRowIndex + 1
End If
Next r
End With
答案 0 :(得分:1)
首先,您需要从最后一行迭代到第一行:
For r = LastRow to 1 step -1
'Next, add if statement inside the loop checking if cell returns error:
If IsError(.Cells(r, "L").Value) then
'if so, delete this row:
.Cells(r, "L").entirerow.delete
'..... the rest of your code as ElseIf part of conditional statement
ElseIf LCase(.Cells(r, "L").Value) Like LCase("Record*") Then
If UBound(Split(.Cells(r, "L"), ",")) > 0 Then
i = i + 1
ReDim v(1 To i)
v(i) = pasteRowIndex
End If
Sheets("Demand").Rows(r).Copy Sheets("Data").Rows(pasteRowIndex)
pasteRowIndex = pasteRowIndex + 1
End If
Next r
答案 1 :(得分:0)
喜欢这个......
For r = 1 To LastRow
If Not IsError(.Cells(r, "L").Value) Then
If LCase(.Cells(r, "L").Value) Like "record*" Then
If UBound(Split(.Cells(r, "L"), ",")) > 0 Then
i = i + 1
ReDim v(1 To i)
v(i) = pasteRowIndex
End If
Sheets("Demand").Rows(r).Copy Sheets("Data").Rows(pasteRowIndex)
pasteRowIndex = pasteRowIndex + 1
End If
End If
Next r