在进入时制作Excel细胞添加剂(VBA)

时间:2017-11-28 08:25:27

标签: excel-vba vba excel

我有一个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崩溃并且必须重新启动。我错过了什么?

1 个答案:

答案 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)就足够了。