【发布时间】:2017-03-28 12:09:17
【问题描述】:
我正在构建一个工作表,它将跟踪我们传入的预告片并将该信息放在仪表板上。我有 VBA 设置,当用户将 A 列中的单元格从此处更改为已关闭时,它会将该行复制到下一张将保留预告片历史记录的工作表。
我的问题是完成页面上的 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
【问题讨论】:
-
您缺少的一件事是我们可以帮助您的源代码。我们很好,但不是精灵。请发布您的源代码,我们将能够更好地为您提供帮助。
-
我不太确定您的期望是什么?当您复制一行时,谁或什么应该更改
Completed表上的任何内容?显然,要复制一行的 sub 包括行.EnableEvents = False。所以,另一个潜艇不会运行。这很好。因此,如果您想在复制该行之后更改工作表Completed上的任何内容,那么我建议您将该位包含在复制该行的 sub 中。 -
您说您正在复制一行,但如果目标范围内有 >1 个单元格,则宏退出(如果 Target.Count > 1 Then Exit Sub)。很可能它不会因此而触发。
-
@Flephal 它不会运行,因为事件被禁用。
-
@Flephal 你说过
EnableEvents = False is required。然而,这正是 OP 想知道的:为什么该事件没有触发和更新日期。上述帖子中的 secondWorksheet_Change将一行从“主工作表”复制到“已完成”工作表,然后 firstWorksheet_Change应该更新日期(在它被第二个Worksheet_Change复制之后)。但这不会发生,因为在第二个Worksheet_Change运行时事件被禁用。