Excel VBA时间戳未更新

时间:2017-03-28 12:09:18

标签: excel vba excel-vba timestamp

我正在构建一个工作表,它将跟踪我们的传入预告片并将这些信息放在仪表板上。我有VBA设置,当用户将A列中的单元格从Here更改为Closed时,它会将该行复制到保留预告片历史记录的下一页。

我的问题是,在复制行时,已完成页面上的VBA时间戳未更新。我知道vba有效,因为我可以更改已完成工作表上的预告片编号,它将触发vba并显示时间戳。但是,当从仪表板表复制行时,我需要显示时间戳。

我是否遗漏了需要打开的内容,这有助于触发时间戳?

由于

编辑 - 抱歉,我没有添加代码。这是我在完成的工作表上的时间戳

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("C2:C10000")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub

With Application
    .ScreenUpdating = False
    .EnableEvents = False
    With Cells(Target.Row, 10)
        .Value = Now
        .NumberFormat = "mm/dd/yyyy hh:mm:ss"
    End With
    .EnableEvents = True
    .ScreenUpdating = True
End With

End Sub

我的信息中心页面的代码,用于复制

上的行
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A2:A5000")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub

Dim NR As Long

With Application
    .EnableEvents = False
    .ScreenUpdating = False
    Select Case Target.Value
        Case "Closed"
          Range("A" & Target.Row & ":z" & Target.Row).Copy _
          Worksheets("Completed").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
          Target.EntireRow.Delete Shift:=xlUp
    End Select
    .EnableEvents = True
    .ScreenUpdating = True
End With

End Sub

1 个答案:

答案 0 :(得分:1)

这是我提出的解决方案。我不明白为什么你需要有两个工作表函数才能满足要求。将此代码放在仪表板工作表中,它将复制并粘贴到“已完成”工作表。我在代码中添加了一些内容。首先,错误处理,如果有错误并且.EnableEvents = False是执行的最后一行之一,后续事件将不会触发,您将不​​会对自己感到满意。我还添加了一些似乎在您的代码中遗漏的End If。我在代码中添加了一些注释,以便您了解我在哪里进行了更改。

Private Sub Worksheet_Change(ByVal Target As Range)
  On Error GoTo ErrorHandler

If Intersect(Target, Range("A2:A5000")) Is Nothing _
   Then Exit Sub
If Target.Count > 1 Then
   Exit Sub
End If

If Target = "" Then
   Exit Sub
End If

Dim NR As Long
With Application
  .EnableEvents = False
  .ScreenUpdating = False
  Select Case Target.Value
    Case "Closed"
      Range("A" & Target.Row & ":z" & Target.Row).Copy _
      Worksheets("Completed").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
      'get the last cell used.
      Set lastCell = Worksheets("Completed").Range("A" & Rows.Count).End(xlUp)
      'new line of code
      lastCell.Offset(0, 10).Value = Now
      lastCell.Offset(0, 10).NumberFormat = "mm/dd/yyyy hh:mm:ss"
      Target.EntireRow.Delete Shift:=xlUp
   End Select
  .EnableEvents = True
  .ScreenUpdating = True

End With

Exit Sub
ErrorHandler:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    MsgBox "You have encountered an error. Please notify admin"
End Sub