如何使我的VBA代码给我我需要的日期戳?

时间:2019-02-07 18:46:15

标签: excel vba

我正在尝试在A列单元格中创建一个非易失性日期戳,并非每次都立即记住,而是在创建条目时逐个单元格地创建一个非易失性日期戳。我在提供的样本中尝试的是在同一行的B,C和D单元格中检测到值时,应添加戳记。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
For i = 2 To 10000
If Cells(i, “B”).Value <> “” And Cells(i, “C”).Value <> “” And Cells(i, “D”).Value <> “” And Cells(i, “A”).Value = “” Then

Cells(i, "A").Value = Date & " " & Time
Cells(i, "A").NumberFormat = "m/d/yyyy h:mm AM/PM"
End If
Next
Range("A:A").EntireColumn.AutoFit
End Sub

不幸的是,我只是想弄清楚我在VBA代码中正在寻找的内容,而没有代码背景,所以我不知道从哪里开始解决此问题。

我将其设置为10000,这是一个简单的事实,只要输入条目,我不知道如何告诉它

2 个答案:

答案 0 :(得分:1)

当B:D列填充且A列仍然为空时,您似乎想接收日期戳。

如果将值写回到工作表,请禁用事件处理并提供错误控制。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Range("B:D"), Target) Is Nothing Then
        On Error GoTo exit_handler
        Application.EnableEvents = False
        Dim r As Range
        For Each r In Intersect(Range("B:D"), Target).Rows
            If Cells(r.Row, "B").Value <> vbNullString And Cells(r.Row, "C").Value <> vbNullString And _
               Cells(r.Row, "D").Value <> vbNullString And Cells(r.Row, "A").Value = vbNullString Then
                Cells(i, "A").Value = Now
                Cells(i, "A").NumberFormat = "mm/dd/yyyy h:mm AM/PM"
            End If
        Next t
    End If

exit_handler:
    Application.EnableEvents = True

End Sub

答案 1 :(得分:0)

尝试以下方法摆脱循环:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    If Target.Count = 1 And Target.Column > 1 And Target.Column < 5 Then
        If Cells(Target.Row, "B").Value <> "" And Cells(Target.Row, "C").Value <> "" And Cells(Target.Row, "D").Value <> "" And Cells(Target.Row, "A").Value = "" Then
            Cells(Target.Row, 1).Value = Now
            Cells(Target.Row, 1).NumberFormat = "m/d/yyyy h:mm AM/PM"
            Range("A:A").EntireColumn.AutoFit
        End If
    End If
End Sub

简而言之,当您对B C或D列进行更改时,它将检查该行的所有3是否已填充,如果没有,则放置时间戳。跳过循环。如果您粘贴数据而不是输入数据,则将无法正常工作,而应使用Pawel答案中的循环。