Excel 如何仅在输入特定值时创建时间戳

Excel 如何仅在输入特定值时创建时间戳,excel,vba,Excel,Vba,我正在尝试编写一个sub,当在第I列中输入文本“YES”时,它会在第J列中创建一个时间戳 现在我有一个正在工作的sub,当I列中的一个单元格被更改时,它会在J列中创建一个时间戳。但我试图更改此潜艇以符合上述标准,但迄今为止失败。你能给我指点方向吗 Private Sub Worksheet_Change(ByVal Target As Range) Dim speakRange As Range Dim timeSpeakRange As Range Set speakRange = Ran

我正在尝试编写一个sub,当在第I列中输入文本“YES”时,它会在第J列中创建一个时间戳

现在我有一个正在工作的sub,当I列中的一个单元格被更改时,它会在J列中创建一个时间戳。但我试图更改此潜艇以符合上述标准,但迄今为止失败。你能给我指点方向吗

Private Sub Worksheet_Change(ByVal Target As Range)

Dim speakRange As Range
Dim timeSpeakRange As Range

Set speakRange = Range("I3:I1000")

If Intersect(Target, speakRange) Is Nothing Then Exit Sub

'Stop
Application.EnableEvents = False

'column for timestamp
Set timeSpeakRange = Range("J" & Target.Row)


'Determine if the input date/time should change

If timeSpeakRange .Value = "" Then

    timeSpeakRange .Value = Date

End If


'Turn events back on
Application.EnableEvents = True


End Sub

与其提前退出,不如否定你的陈述。从那里,运行
Target=“YES”
的简单检查,如果是这样,则使用
Offset(0,1)
访问右侧的单元格以添加日期


您可能需要格式化日期并在下面签出@BigBen注释,以实现理想的错误处理

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("I:I")) Is Nothing Then
    If Target = "YES" Then
        Application.EnableEvents = False

            Target.Offset(, 1) = Date

        Application.EnableEvents = True
    End If
End If

End Sub

但如果
Target
是多单元格范围,则此操作将失败。如果Target.Cells(1.Value:-)问题已解决,则很容易更改为
!或者这可能是OP的一个教学时刻。@SJR-如果你选择了一堆单元格,输入一些内容,并用Ctrl+Shift+enter进行确认。我明白你的意思@BigBen-我在接受post literal时,在OPs尝试中专注于纠正其他内容。预测其他错误是前进的方向,但已经有其他问题要开始。想知道溢出范围如何影响这一点。与前面的数组公式相同,Prob是真正安全的-
Target。单元格(1)
可能不一定对应于列I中的单元格-例如,如果
Target
H10:J10
。。。为了安全起见,您确实希望在
目标
和列I的交叉点上工作。提示:由于您正在处理工作表更改事件,您可能还希望看到