我在 Excel
中找到了可以工作的代码这几乎可以满足我的需要。
我的需要是当在另一列的单元格中进行更改时,将今天的日期自动添加到一列的单元格中。因此,如果我单击 M 列第 20 行的单元格并更改数据或添加数据(在这种情况下,它是带有下拉列表的状态列),那么在第 N 行第 20 列的单元格中,它将放置今天的日期或用今天的日期替换旧日期。 (每次更改状态下拉菜单。)
此代码对 2 个不同的列执行此操作,因为我对其进行了更改。
问题:
行,或者如果我删除行,比如说 3 行,它将添加日期或
覆盖刚刚删除的 3 行下面的 3 行中的日期。这是
不好。如果我在单元格中进行更改,我只想添加一个日期
本身。当我们添加或更改状态(数据)时,只需自动添加日期
在它左边的单元格中。
添加。
输入任何数据,然后单击单元格,它仍然会添加日期
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
最佳答案
这些修改会处理您的前两个规范。
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 放弃“单元内”编辑,而不是 Enter↵ 或选择另一个单元格。使用 Esc 不会更改单元格中的值,Worksheet_Change未触发事件宏。使用 Enter 或选择另一个单元格确实会更改单元格中的值,并且在可以应用正确的键盘练习时,针对懒散的做法进行编码根本不值得开销。
附录:
如果手还在鼠标上,也可以点击 × 在编辑栏中按 [Esc] 进行单元格内编辑。
关于excel - 当对相邻单元格进行更改时,自动填充单元格中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025432/