当对相邻单元格进行更改时,自动填充单元格中的日期

时间:2016-01-26 22:39:54

标签: excel excel-vba vba

我发现代码可以在Excel中运行,几乎可以满足我的需要。

我需要在另一列的单元格中进行更改时,将今天的日期自动添加到一个列的单元格中。所以如果我点击Column M Row 20的单元格&更改数据或添加数据(在这种情况下,它是带有下拉列表的状态列)然后在列N行20的单元格中,它将放置今天的日期或用今天的日期替换旧日期。 (每次更改状态下拉列表。)

此代码对2个不同的列执行此操作,因为我对其进行了更改。

问题:

  1. 如果我插入行,它会将今天的日期放入新插入的行中 行或如果我删除行,让我们说3行它将添加日期或 覆盖3刚刚删除的3行中的日期。这是 不好。如果我在单元格中进行更改,我只想添加日期 本身。添加或更改状态时,只需自动添加日期(数据) 在左边的单元格中。

  2. 此外,我需要前9行不受此自动日期的影响     添加。

  3. 最后,如果我双击Column M Row 20的单元格,但不是     输入任何数据,然后单击单元格,它仍将添加日期     列N行20的单元格。

  4. 我找到了原始代码: 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
    

1 个答案:

答案 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]进行单元格内编辑。

in-cell-edit_escape