Excel VBA 停止而没有错误消息

Posted

技术标签:

【中文标题】Excel VBA 停止而没有错误消息【英文标题】:Excel VBA stops without error message 【发布时间】:2013-06-09 00:54:59 【问题描述】:

我有一些代码无缘无故停止执行,也没有产生错误。会不会是内存问题?它正在操作的工作表大约有 1600 行,其中包含大量格式和条件格式,并且代码在插入一行后停止。这是停止的代码sn-p:

With wsBudget
    TotalColumn = .Range("TotalColumn").Column
    FormulaColumn = .Range("FormulaColumn").Column

    If .Cells(lRow, 1).Interior.Color <> 14408946 Then  'OK to insert
        cell.EntireRow.Copy
        cell.Resize(RowCount, 1).EntireRow.Insert  'It stops after stepping into this line
        .Cells(cell.Row - RowCount, 1).EntireRow.ClearContents
        .Cells(cell.Row - RowCount - 1, FormulaColumn).Resize(RowCount + 1, 1).FillDown
        .Cells(cell.Row - RowCount - 1, TotalColumn).Resize(RowCount + 1, 1).FillDown
        .Cells(cell.Row - RowCount - 1, 1).Resize(RowCount, 1).Interior.Color = RGB(255, 255, 255) 'OK to insert or delete
    Else
        MsgBox "You must select a cell within a table before inserting a row."
        Exit Sub
    End If

End With

【问题讨论】:

调查Exit Sub 的工作原理、它的作用以及它何时出现在您的代码中。我建议逐步完成调试过程 您需要在代码中包含错误处理程序。如果您使用过On error resume next,请将其删除。 '改为使用On error goto err_location: 并将其路由到标签。使用Err 对象,您可以检查问题。 也是,我不确定它是否是故意的,但是,停止的行和之前的行的引用不合格。应该是一个。 (点)在单元格关键字前面(注意大小写差异)。 @mehow:它没有到达 Exit Sub 行。我的代码在停止执行的那一行有一条注释:它是 ....entirerow.insert 行。 @Santosh:正如我在问题中所说,它不会产生错误,因此错误处理对我没有帮助。我知道它不会产生错误,因为我确实尝试过错误 goto。 【参考方案1】:

我对 wholerow.insert 也有同样的问题。在我编辑了我的代码或注释行(没有改变任何有意义的内容)之后,我的第一次执行才出现这个问题。我的原始工作簿是一个 .xltm 文件,但将其保存为常规 .xlsm 解决了问题。

【讨论】:

【参考方案2】:

好的,现在我想我可能有一个答案(或者至少是一个解决方法)。正如我上面指出的,我认为它可能与剪贴板有关。所以在复制指令之前,我插入了

Application.CutCopyMode = False

现在问题已经解决了。

【讨论】:

【参考方案3】:

我 90% 确定这是 Excel 中的一个错误。我在多个宏上遇到过问题,即使所有其他因素都不变,它也是不一致的;重新运行通常可以正常工作。在长时间运行的宏上也更有可能。

不是Exit Sub,因为它跟在消息框后面。这并不是缺少错误处理,因为如果存在未处理的错误,VBA 应该会中断(并且确实会中断)。错误也是可以重现的。

我发现的最佳解决方法是在“主”工作表上输出开始和结束时间。如果用户没有得到结束时间,则假定宏已过早停止。

【讨论】:

以上是关于Excel VBA 停止而没有错误消息的主要内容,如果未能解决你的问题,请参考以下文章

在给定情况Excel VBA上停止消息框

VBA Excel 错误对象变量或未设置块变量

VBA:excel正在关闭,没有产生错误

从 C# 运行 Excel 宏:从 VBA 捕获运行时错误

Excel VBA 应用程序自发停止并显示“代码执行已停止”消息

Excel 2016 VBA - 状态栏未显示完整消息