我是一个Excel-VBA新手,我正在尝试编写一段代码,该代码由某人更改工作表中单元格的值触发。它应该将更改单元格的值设置为零,如果它小于零。代码如下所示:Worksheet_Change事件中的目标范围不正确
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
现在发生的事情是,当我改变6列任意单元格的值,在含有小于零号片的每一个细胞是也变为零。
我在考虑为Worksheet_Change
事件处理程序创建的“目标”对象只包含更改的单元/单元,因此我的代码只会更改被修改的单元格的值,并触发第一名。
我试图通过使用Debug.Print
来帮助自己输出对象的地址。它打印出表格中每个单元格的地址值小于零,因此我假设处理程序运行了好几次。
实际上我发现了一个问题本身的解决方法,但我的问题是这样的:我如何在使用Worksheet_Change事件失败以及未来可以做什么以避免出现这样的问题?
使用application.enableevents = false或您的事件过程将自行运行。 – Jeeped
'Target'确实只涉及已更改的单元格,并且我无法复制您的错误。试试Jeeped的修正案,看看你如何继续。 – SJR
不要忘记将它设置回'Application.EnableEvents = True',否则你的事件将不会在下次启动 – Tom