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 停止而没有错误消息的主要内容,如果未能解决你的问题,请参考以下文章