簡體   English   中英

Excel VBA-更改單元格時運行宏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM