将单元格值添加到间接单元格位置

时间:2015-03-20 17:10:24

标签: excel vba

我尝试使用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的了解。有人对不同的方法有什么建议吗?

2 个答案:

答案 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的建议也是如此。需要禁用事件。