2013-10-02 63 views
2

我正在嘗試編寫一個在編輯表單時自動運行的宏。列H的標題爲「已更新」,並且宏應將今天的日期放在單元格H#中,其中#是已更改的單元格的行。下面是我使用的代碼:Excel VBA - 更改單元格時運行宏

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本身不會關閉,我不得不使用任務管理器來結束它。

回答

4

使用

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 
0
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 
相關問題