2013-06-12 124 views
0

我有一些代码停止执行没有明显的原因,并没有产生一个错误。这可能是内存问题吗?它正在操作的工作表有大约1600行,包含大量格式和条件格式,插入行后代码停止。这里是它停止的代码片段:Excel VBA停止没有错误信息

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 
+1

调查'Exit Sub'是如何工作的,以及它在你的代码中发生了什么。我建议逐步执行调试过程 – 2013-06-12 22:59:44

+1

您需要将错误处理程序包含到代码中。如果您已经使用了'在错误恢复下一个'然后删除它。 '改用'On error goto err_location:'并将其路由到标签。使用'Err'对象可以检查问题。 – Santosh

+1

也是,而且我不确定它是否有意为之,但是,对于停止的行以及之前的行的引用不合格。应该是。 (点)在单元格关键字前(注意大小写区别)。 – sous2817

回答

0

我有与wholerow.insert相同的问题。在编辑我的代码或注释行后(没有改变任何有意义的)之后,问题只出现在我的第一次执行中。我的原始工作簿是.xltm文件,但将其保存为常规.xlsm由于某种原因解决了问题。

0

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

Application.CutCopyMode = False 

并且问题现在已消失。

0

我90%确定这是Excel中的一个错误。我在多个宏中遇到了这个问题,即使所有其他因素保持不变,它也是不一致的;重新运行通常只是起作用。这也是一个长期运行的宏观可能性。

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

我找到的最佳解决方法是在“主”工作表上输出开始和结束时间。如果用户没有获得结束时间,则认为该宏提前停止。