我发现代码可以在Excel
中运行,几乎可以满足我的需要。
我需要在另一列的单元格中进行更改时,将今天的日期自动添加到一个列的单元格中。所以如果我点击Column M Row 20的单元格&更改数据或添加数据(在这种情况下,它是带有下拉列表的状态列)然后在列N行20的单元格中,它将放置今天的日期或用今天的日期替换旧日期。 (每次更改状态下拉列表。)
此代码对2个不同的列执行此操作,因为我对其进行了更改。
问题:
如果我插入行,它会将今天的日期放入新插入的行中 行或如果我删除行,让我们说3行它将添加日期或 覆盖3刚刚删除的3行中的日期。这是 不好。如果我在单元格中进行更改,我只想添加日期 本身。添加或更改状态时,只需自动添加日期(数据) 在左边的单元格中。
此外,我需要前9行不受此自动日期的影响 添加。
最后,如果我双击Column M Row 20的单元格,但不是 输入任何数据,然后单击单元格,它仍将添加日期 列N行20的单元格。
我找到了原始代码: Auto-fill the date in a cell, when the user enters information in an adjacent cell
我的代码版本是:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range, M As Range, X As Range, Inte As Range, r As Range
Set A = Range("M:M,X:X")
Set Inte = Intersect(A, Target)
If Inte Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each r In Inte
r.Offset(0, 1).Value = Date
Next r
Application.EnableEvents = True
End Sub
答案 0 :(得分:3)
这些修改会照顾您的前两个规范。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("M:M,X:X"), Range("10:" & Rows.Count)) Is Nothing Then
If Target.Count < Columns.Count Then
On Error GoTo bm_Safe_Exit
Application.EnableEvents = False
Dim r As Range
For Each r In Intersect(Target, Range("M:M,X:X"), Range("10:" & Rows.Count))
With r.Offset(0, 1)
.Value = Now 'use Now to retain the time as well as the date
.NumberFormat = "dd-mmm-yyyy hh:mm:ss" 'change to what you prefer
End With
Next r
End If
End If
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
就第三种情况而言,我会谦虚地建议您习惯使用首选方法点击 Esc 放弃“in-cell”编辑而不是Enter↵或选择另一个单元格。使用Esc不会更改单元格中的值,并且不会触发Worksheet_Change事件宏。使用回车或选择另一个单元格可以更改单元格中的值,并且可以根据缺乏实际操作进行编码,如果可以应用适当的键盘操作,则不值得花费。
附录:
如果您的手仍然在鼠标上,您还可以单击公式栏中的×以[Esc]进行单元格内编辑。