[英]Excel VBA - Run a macro when a cell is changed
我正在嘗試編寫一個宏,該宏在工作表每次編輯時都會自動運行。 H列的標題為“ Updated on”,宏應將今天的日期放在單元格H#中,其中#是已更改的單元格行。 這是我使用的代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Select
Range("H" & ActiveCell.Row).Select
ActiveCell.Value = Date
End Sub
保存工作簿並更改單元格A2的值后,代碼按我期望的那樣將今天的日期放入H2,但隨后給了我一個錯誤。 我單擊了調試,並突出顯示了Target.Select
行。 我以為循環是問題所在,所以我更新了代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Select
Range("H" & ActiveCell.Row).Select
ActiveCell.Value = Date
Application.EnableEvents = True
End Sub
這次,我更改了單元格B3的值,並將今天的日期輸入到B4中。 然后,Excel被部分凍結:我仍然可以編輯該工作簿,但是無法打開或查看任何其他工作簿。 我關閉了所有工作簿,但是Excel本身無法關閉,因此我不得不使用任務管理器來結束它。
運用
Private Sub Worksheet_Change(ByVal Target As Range)
Range("H" & Target.Row).Value = Date
End Sub
會給您帶來更好的穩定性。 Target
是已更改的范圍。
可能(我在家,無法檢查)更改值會重新觸發Worksheet_Change事件。 如果是這樣,則使用
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> Range("H" & Target.Row).Address Then
Range("H" & Target.Row).Value = Date
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
const DATE_COL as long = 8
Dim c as range
Set c = Target.Cells(1)
If c.Column = DATE_COL Then Exit Sub
On Error Goto haveError
Application.EnableEvents=False
Me.Cells(c.Row, DATE_COL).Value = Date
haveError:
Application.EnableEvents=True
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.