VBA日期时间自动填充未运行

55t*_*iss 0 excel datetime vba

我有一些代码,每当在B列中输入内容时,都应在A列中显示日期。我在安全设置中启用了宏,但仍然没有任何反应。我已将VBA代码张贴ThisWorkbook在该项目下,因为我希望每张纸上都发生同样的事情。有谁知道为什么它不会运行?

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
 ByVal Source As Range)
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target)
xOffsetColumn = -1
If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each Rng In WorkRng
        If Not VBA.IsEmpty(Rng.Value) Then
            Rng.Offset(0, xOffsetColumn).Value = Now
            Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
        Else
            Rng.Offset(0, xOffsetColumn).ClearContents
        End If
    Next
    Application.EnableEvents = True
End If
End Sub
Run Code Online (Sandbox Code Playgroud)

Big*_*Ben 5

进行一些更改:

1)首先,您需要更改为工作簿级别的事件:该Workbook.SheetChange事件。

2)然后更改Application.ActiveSheetSh

3)Target如果Target在代码体内使用,请确保已命名参数。

4)添加一些错误处理,以确保始终重新启用事件:

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
                                 ByVal Target As Range)
    Dim WorkRng As Range
    Dim Rng As Range
    Dim xOffsetColumn As Integer
    Set WorkRng = Intersect(Sh.Range("B:B"), Target)
    xOffsetColumn = -1
    If Not WorkRng Is Nothing Then
        On Error GoTo SafeExit
        Application.EnableEvents = False
        For Each Rng In WorkRng
            If Not VBA.IsEmpty(Rng.Value) Then
                Rng.Offset(0, xOffsetColumn).Value = Now
                Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
            Else
                Rng.Offset(0, xOffsetColumn).ClearContents
            End If
        Next
    End If

SafeExit:
    Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)