超出堆栈空间和对象范围错误的值

我正在试图在对工作表进行更改之后对数据进行求和。 包含数据的列在第1行中具有文本。

我第一次testing它,我得到了

运行时错误“28”:堆栈空间不足

我第二次testing它,我得到了

运行时错误“-2147417848(80010108)”:对象'范围'的方法'值'失败,然后Excel崩溃。

Sub Worksheet_Change(ByVal Target As Range) Dim LastCol As Integer Dim NumProjects As Integer Dim i As Integer With ActiveSheet LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column End With NumProjects = LastCol - 5 For i = 1 To NumProjects Range("E44").Offset(0, i).Value = WorksheetFunction.Sum(Range("E2").Offset(0, i), Range("E43").Offset(0, i)) Next i End Sub 

您正在更改Worksheet_Change事件内的单元格的值。 此更改导致Worksheet_Change事件再次触发,并一直这样做,直到Excel崩溃。

为了解决这个问题,您需要禁用然后重新启用事件:

 Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False ' do stuff Application.EnableEvents = True End Sub 

您在代码中遇到的问题是您正在使用Worksheet_Change事件。 当用户更改工作表上的值时,您的macros将被放在进程堆栈中。 那么你的macros变化20? 值将20个你的macros的副本放在堆栈上。 然后这20个副本改变400个值,将400个新副本放在堆栈上。 在你知道你的堆栈空间之前。 繁荣!!! 使用Worksheet_SelectionChange可能会给你所需的结果,并不会导致Worksheet_Change做的recursion。

无论如何,使用数组公式会更高效。 运行此代码一次以插入数组公式。

 Sub insertArrayFormula() Application.ScreenUpdating = False Dim LastCol As Integer With ActiveSheet LastCol = .Cells(1, .Columns.count).End(xlToLeft).Column - 5 Range(Cells(44, 5), Cells(44, LastCol)).FormulaArray = "=Sum($E$2:$E$43)" End With Application.ScreenUpdating = True End Sub