2015-04-23 124 views
0

我有一行代碼在調試時完美運行,但在完全執行時一直崩潰。實質上,它應該做的是組合兩行數據。我這樣做是因爲我從數據庫導入數據,在該數據庫中,它將事務記錄在兩行中:事務的一側在一行上,而另一側在另一行上,前一列的所有數據都是位於這些行中的任何一行上。因此,例如:代碼在調試時運行良好,但在完全執行期間崩潰

 
|trans 1 | 1/1/2015| $500.00| 0 

|trans 1 |---------| 0| 497.00| 

理想情況下,應該像

 
|trans 1|1/1/2015|500.00|497.00| 

第二排應予刪除。

這是我的代碼做到這一點:

Sub Collapse_Rows() 
    Dim ALLCS As Worksheet 

    Set ALLCS = Sheets("Asset LLC (Input)") 
    On Error Resume Next 
    Application.EnableEvents = False 

    For x = 66515 To 16 Step -1 
     If ALLCS.Cells(x, 2) = ALLCS.Cells(x + 1, 2) Then 
      If ALLCS.Cells(x, 28) <> Empty Then 
       ALLCS.Cells(x + 1, 28) = ALLCS.Cells(x, 28) 
      End If 
     End If 

     If ALLCS.Cells(x - 1, 2) = ALLCS.Cells(x, 2) Then 
      If ALLCS.Cells(x, 28) <> Empty Then 
       ALLCS.Cells(x - 1, 28) = ALLCS.Cells(x, 28) 
      End If 
     End If 

     If ALLCS.Cells(x, 5) <> Empty And ALLCS.Cells(x, 2) = Empty Then 
     ElseIf ALLCS.Cells(x, 24) = Empty Then 
      ALLCS.Cells(x, 24).EntireRow.Select 
      Selection.Delete 
     End If 
    Next 
End Sub 

我部分在調試運行這段代碼和它工作得很好。當我完全運行代碼時,excel崩潰了爲什麼/如何防止這種情況發生的任何想法?

+0

你應該嘗試並添加調試語句(如debug.print)瞭解此時它崩潰 – Xarylem

+0

究竟會是做什麼@Xarylem是 – dom176

+0

ELSEIF在這裏糾正 - * ElseIf ALLCS.Cells(x,24)= Empty然後*或它應該是隻有在? –

回答

2

乍一看,它似乎是問題的一個主要部分在於代碼本身有點資源密集的事實。

首先,它從第66515行開始。是否有從這裏開始的理由?這意味着在大多數情況下,將會有大約33,250行刪除執行(從16 - > 66515的每隔一行)。這將需要很長時間,並且在很多情況下,Excel將無響應。

有幾個選項。

確定您是否真的需要在第66515行開始循環。這是一個固定的起點嗎?如果沒有,使用代碼來確定實際數據集的最後一行並從那裏開始。

此外,在您的代碼開始處,使用:Application.ScreenUpdating = False關閉SceenUpdating。 在你的代碼的結束,重新打開它使用Application.ScreenUpdating = True

+0

要增加上述內容還有一件事是用'ALLCS.Cells(x,24).EntireRow.delete'替換'ALLCS.Cells(x,24).EntireRow.Select'並移除'Selection.delete'以獲得擺脫不必要的選擇步驟。 – Sobigen

+0

66515是一個固定的起點,我有這個建議,整個.select移動是一個嘗試修復這個問題。 – dom176

相關問題