首页 > 解决方案 > 自动日期/时间戳有时不起作用

问题描述

我不确定是因为我使用的是 Office 2016 还是我的文件变得太大 (450KB) 但有时我的日期/时间戳代码不起作用(运行时错误)。我相信代码和表单是在我使用 excel 2013 时开发的。

代码是:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim CC As Range
Dim CB As Range

Application.EnableEvents = False
If Not Intersect(Range("C16:C101"), Target) Is Nothing Then
   For Each CC In Intersect(Range("C16:C101"), Target)
        If CC.Value <> "" Then
           CC.Offset(, -2).Value = Date & " "
           CC.Offset(, -2).NumberFormat = "mm/dd/yy"
        End If
   Next CC
End If
Application.EnableEvents = True

Application.EnableEvents = False
If Not Intersect(Range("C16:C101"), Target) Is Nothing Then
    For Each CC In Intersect(Range("C16:C101"), Target)
        If CC.Value <> "" Then
           CC.Offset(, -1).Value = Time & " "
           CC.Offset(, -1).NumberFormat = "hh:mm"
        End If
    Next CC
End If
Application.EnableEvents = True

End Sub

标签: excelvba

解决方案


  1. 把两个单元格写在一起;原来的两个引用了相同的范围。
  2. 将尾随空格放入单元格编号/日期格式中。实际值中的尾随空格可能会将值更改为文本。
  3. 在您知道自己确实需要它之前,无需设置或声明任何东西。不要声明您不打算使用的变量。
  4. 一点错误控制从来都不是坏事。

代码重写:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("C16:C101"), Target) Is Nothing Then
       on error goto safe_exit
       Application.EnableEvents = False
       Dim CC As Range
       For Each CC In Intersect(Range("C16:C101"), Target)
           If CC.Value <> "" Then
               CC.Offset(, -1).Value = Time
               CC.Offset(, -2).Value = Date
               CC.Offset(, -1).NumberFormat = "hh:mm_)"
               CC.Offset(, -2).NumberFormat = "mm/dd/yy_)"
           End If
       Next CC
    End If

safe_exit:
    Application.EnableEvents = True

End Sub

推荐阅读