Автоматическая отметка даты / времени иногда не работает - PullRequest
0 голосов
/ 02 октября 2018

Я не уверен, что это из-за того, что я использую Office 2016 или размер моего файла становится слишком большим (450 КБ), но иногда мой код метки даты / времени не работает (ошибка времени выполнения).Я считаю, что код и форма были разработаны, когда я использовал 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

1 Ответ

0 голосов
/ 02 октября 2018
  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
...