我正在尝试在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,这是一个简单的事实,只要输入条目,我不知道如何告诉它
答案 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答案中的循环。