我是一個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