我正在尝试在对工作表进行更改后对数据进行求和。包含数据的列在第1行中包含文本。
我第一次测试时,我得到了
运行时错误' 28':堆栈空间不足
第二次测试时,我得到了
运行时错误' -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
答案 0 :(得分:2)
您正在更改Worksheet_Change
事件中的单元格值。此更改会导致Worksheet_Change
事件再次触发,并一直这样做,直到Excel崩溃。
要解决此问题,您需要禁用然后重新启用事件:
Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
' do stuff
Application.EnableEvents = True
End Sub
答案 1 :(得分:0)
您的代码存在的问题是您正在使用Worksheet_Change事件。当用户更改工作表上的值时,您的宏将放在进程堆栈上。然后你的宏改变了20?将20个宏的副本放在堆栈上的值。然后这20个副本改变400个值,在堆栈上放置400个新副本。在你知道你的堆栈空间之前。繁荣!!!使用Worksheet_SelectionChange可能会为您提供所需的结果,并且不会导致Worksheet_Change的递归。
无论如何,使用数组公式会更有效率。运行此代码一次以插入数组公式。
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