我有一行代码在调试时运行完美,但在完全执行时始终崩溃。基本上它应该做的是组合两行数据。我这样做是因为我从数据库导入了数据,在该数据库中它将事务记录在两条不同的行上:事务的一侧在一条线上而另一条在另一条线上,前一列的所有数据都是位于其中一条线上。例如:
|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 :(得分:2)
乍一看,似乎问题的一个主要部分在于代码本身在某种程度上是资源密集的事实。
首先,它从第66515行开始。是否有理由从这里开始?这意味着在大多数情况下,将有大约33,250行删除执行(从16 - > 66515开始每隔一行)。这将需要很长时间,并且在许多情况下Excel将无法响应。
一些选择。
确定您是否确实需要在第66515行开始循环。这是一个固定的起点吗?如果没有,请使用代码确定实际数据集的最后一行并从那里开始。
此外,在代码的开头,使用:SceenUpdating
关闭Application.ScreenUpdating = False
。
在代码的最后,使用Application.ScreenUpdating = True