嘿,我有代码将行移到另一个带有单元格名称的工作表,一个循环,直到它在数据末尾遇到一个空白,这里的代码摘录;
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 <> ""上引发错误,表示类型不匹配。我不确定发生了什么改变来突然停止这项工作,有什么想法吗?非常感谢。
最佳答案
我个人不喜欢 Do Loops 遍历一组单元格。我更喜欢 For Each 循环。
正如@bruceWayne 所说,避免使用 Select 会减慢代码速度。
适当的缩进使代码更容易阅读并避免简单的错误。
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
关于在 ActiveCell.Value <> ""上执行 VBA 类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39920210/