2013-06-12 147 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應該會中斷(並且確實)。錯誤也是可重現的。

我找到的最佳解決方法是在「主」工作表上輸出開始和結束時間。如果用戶沒有獲得結束時間,則認爲該宏提前停止。