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)
进行一些更改:
1)首先,您需要更改为工作簿级别的事件:该Workbook.SheetChange事件。
2)然后更改Application.ActiveSheet为Sh。
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)