我是Excel-VBA的新手,我正在尝试编写一小段代码,这些代码是由某人更改工作表中单元格的值而触发的.如果更改的单元格的值小于零,则应将其设置为零.代码如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
'Debug.Print Target.Address
If Target.Column = 6 Then
For Each Cell In Target.SpecialCells(xlCellTypeConstants, 3)
If Cell.Value < 0 Then
Cell.Value = 0
End If
Next
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
现在发生的是当我更改第6列中任何单元格的值时,包含小于零的数字的工作表中的每个单元格也会更改为零.
我认为为Worksheet_Change事件处理程序创建的"目标"对象只包含已更改的单元格/单元格,因此我的代码只会更改已修改并首先触发事件的单元格的值.
我试图通过使用Debug.Print输出对象的地址来帮助自己.它打印出工作表中每个单元格的地址,其值小于零,因此我假设处理程序运行了几次.
我实际上找到了问题本身的解决方法,但我的问题是:我如何使用Worksheet_Change事件失败,以及我将来可以做些什么来解决这些问题呢?