我需要知道当 B 列中同一行中的单元格发生变化时,如何在 D 列中的单元格中显示时间戳。我在 Paint 中编辑了此屏幕截图,以更轻松地显示我的意思: 图片
我有一个 vba 脚本,它检查不同的工作表中是否存在输入到 B 列的值。这在选择 Worksheet_SelectionChange 事件时发生,因此我不能简单地添加:
Range("D3").Value = Now()
或者类似的东西,因为它每次我选择某个东西时都会更新,我只需要在 B 列中的单元格发生变化时更新它。顺便说一下,B 列中的值只包含数字 0、1 或 2
答案1
此 VBA 代码将执行此操作:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wk As Workbook
Set wk = ThisWorkbook
Dim ws As Worksheet
Set ws = ActiveSheet
WatchedColumn = 2
BlockedRow = 1
TimestampColumn = 4
Crow = Target.Row
CColumn = Target.Column
If CColumn = WatchedColumn And Crow > BlockedRow Then
Cells(Crow, TimestampColumn) = Now()
End If
End Sub
您必须复制代码,转到 Excel 中的视图->宏,创建一个新的宏(任何名称均有效),然后在左栏中双击要使用它的工作表(图片中的红旗),然后在右侧粘贴代码。
每当 B 列上的同一行发生变化时,此宏就会修改 D 列上单元格的内容。变量 BlockedRow 保护第一行,因为它通常有标签,如果您有多行标签,则将变量更改为 2 或更多。
如果需要更改列,请对变量WatchedColumn
和进行更改TimestampColumn
。(A=1、B=2、C=3、D=4、... 等等)。
答案2
我知道已经有答案了,但是这个 VBA 更简洁一些 -
Private Sub worksheet_change(ByVal target As Range)
If Not Intersect(target, Range("B:B")) Is Nothing Then
target.Offset(0, 2) = Now()
End If
End Sub
要调整问题中没有的其他要求,只需添加 if -
Private Sub worksheet_change(ByVal target As Range)
If Not Intersect(target, Range("B:B")) Is Nothing Then
If target.Row > 1 Then
target.Offset(0, 2) = Now()
End If
End If
End Sub
答案3
我想在扫描条形码后在 excel 中的一列中添加日期。扫描条形码后,excel 搜索文档,然后突出显示该行信息。我想在突出显示的行中添加日期。目前我有一个代码,用于双击添加日期,但我想在突出显示行后添加日期。
下面是我的条形码扫描后搜索我的号码的代码,一旦找到它就会突出显示该行信息。
Private Sub worksheet_change(ByVal target As Range)
If Not Intersect(target, Columns("M")) Is Nothing Then
Z = Intersect(target, Columns("M")).Value
If IsNumeric(Z) Then
x = Application.Evaluate("MATCH(" & Z & ",B:B,0)")
Else
x = Application.Evaluate("MATCH(" & Chr(34) & Z & Chr(34) & ",B:B,0)")
End If
If Not IsError(x) Then
Application.Goto Cells(x, 15)
End If
End If
下面是我可以双击我的框来添加日期的地方。我想在行以颜色突出显示后自动添加日期。
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
If Not Intersect(target, Range("K4:K1500")) Is Nothing Then
Cancel = True
target.Formula = Date
End If
End Sub
谢谢