在 ActiveCell.Value <> ""上执行 VBA 类型不匹配错误

标签 vba excel

嘿,我有代码将行移到另一个带有单元格名称的工作表,一个循环,直到它在数据末尾遇到一个空白,这里的代码摘录;

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/

相关文章:

excel - 同时卡住第 1 行和 A 列

excel - 需要 header 在备注中包含计数和连接

vba - 如何通过 VBA 将动态范围从另一个工作表引用到事件工作表单元格

python - 从 VBA 调用 python 脚本

vba - Access 2013 运行时中未显示启动窗体

excel - 值范围内的值

c# - Microsoft.Office.Interop.Excel.WorksheetFunction 不包含 excel 中的所有函数

excel - 如何在 Excel 中进行分布式计算

ms-access - 以连续形式放大复选框

c# - 如何使用 EPPlus 在单元格内创建链接