嘿我有代码将行移出到另一张带有单元名称的工作表,一个循环直到它在数据末尾碰到一个空白,这里是代码的摘录;
Range("AF2").Select
Do While ActiveCell.Value <> ""
strDestinationSheet = ActiveCell.Value
ActiveCell.Offset(0, -31).Resize(1, ActiveCell.CurrentRegion.Columns.count).Select
Selection.Copy
Sheets(strDestinationSheet).Select
N = Cells(Rows.count, "AF").End(xlUp).Row
lastRow = N
Cells(lastRow + 1, 1).Select
Selection.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Sheets(strSourceSheet).Select
ActiveCell.Offset(0, 31).Select
ActiveCell.Offset(1, 0).Select
Loop
然而,虽然这部分代码在运行它的最新实例之前工作正常,但现在在第二行上抛出错误Do While ActiveCell.Value&lt;&gt; “”,说类型不匹配。我不确定有什么改变可以阻止这种突然的工作,任何想法?非常感谢。
答案 0 :(得分:4)
我个人不喜欢Do Loops迭代一组单元格。我更喜欢For Each循环。
同样如@bruceWayne所述,避免使用Select as会减慢代码速度。
正确的缩进使代码更易于阅读并避免出现简单错误。
Dim cel As Range
With Sheets(strSourceSheet)
For Each cel In .Range("AF2", .Range("AF2").End(xlDown))
If Not IsError(cel) Then
strDestinationSheet = cel.Value
cel.Offset(0, -31).Resize(1, cel.CurrentRegion.Columns.Count).Copy
N = Sheets(strDestinationSheet).Cells(Sheets(strDestinationSheet).Rows.Count, "AF").End(xlUp).Row
Sheets(strDestinationSheet).Cells(N + 1, 1).PasteSpecial xlPasteValues
End If
Next cel
End With