我有一个excel电子表格,我试图检测选择中的更改并不断记录新选择中的值。同时,我想在一个范围内检测工作表中的更改。一旦发生这种情况,我想看看当选择更改时记录的值是否为数字,如果它也是数字,则将其添加到更改的值。基本上,如果单元格中有一个数字,并且我输入一个新数字,我希望将它们加在一起,并将单元格的值设置为该总和。
以下是我的内容,从随机帮助文章和其他问题的一些想法中编写:
Dim stuff
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
stuff = Target.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("B3:F49")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If IsNumeric(Target.Value) = True And IsNumeric(stuff) = True Then
Target.Value = Target.Value + stuff
End If
End If
End Sub
但是,当我运行代码并尝试进行更改时,我得到“运行时错误'28':堆栈空间不足”或“运行时错误”-2157417848(80010108)':方法'值'对象'范围'失败'。当我尝试调试时,Excel崩溃并且必须重新启动。我错过了什么?
答案 0 :(得分:0)
在Worksheet_Change
中,您更改了单元格的值,并触发Worksheet_Change
,这会更改单元格的值,并触发Worksheet_Change
,...
在开头使用Application.EnableEvents = False
停止并在结尾处将其设置回True
。
您也可以更改此部分:If IsNumeric(Target.Value) = True
IsNumeric
返回布尔值,所以你在这里做的是If (True/False) = True
。
If IsNumeric(Target.Value)
就足够了。