我尝试使用VBA生成一个函数,该函数会自动将Excel工作表定义范围的一个单元格中的值添加到其右侧的单元格中,以便例如当您输入一个数字时在A1中,该数字将自动添加到A2中的值(并在A1中删除)。这就是我的第一个想法:
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Range("A1:A100")
If cell.Value > 0 Then
cell.Offset(0, 1).Value = cell.Offset(0, 1).Value + cell.Value
cell.ClearContents
End If
Next
End Sub
不幸的是,这会给我一个错误"堆栈空间不足"这就是我对VBA的了解。有人对不同的方法有什么建议吗?
答案 0 :(得分:0)
你非常接近!
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For Each cell In Range("A1:A100")
If cell.Value > 0 Then
cell.Offset(0, 1).Value = cell.Offset(0, 1).Value + cell.Value
cell.ClearContents
End If
Next
Application.EnableEvents = True
End Sub
您必须在处理过程中禁用事件。否则你可以进入一个无限循环。
你也可以改进这个代码,让它运行得更快!
答案 1 :(得分:0)
好像您正在递归该功能。
您正在使用OnChange
进行更改,再次触发OnChange
。
我的建议是使用事件参数Target
并仅对更改的单元格进行操作。
像
这样的东西Target.offset(0,1).value = Target.offset(0,1).value + Target.value
Target.ClearContents
编辑:@ Gary的建议也是如此。需要禁用事件。