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

标签 excel vba

我在 Excel 中找到了可以工作的代码这几乎可以满足我的需要。

我的需要是当在另一列的单元格中进行更改时,将今天的日期自动添加到一列的单元格中。因此,如果我单击 M 列第 20 行的单元格并更改数据或添加数据(在这种情况下,它是带有下拉列表的状态列),那么在第 N 行第 20 列的单元格中,它将放置今天的日期或用今天的日期替换旧日期。 (每次更改状态下拉菜单。)

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

问题:

  • 如果我插入行,它将把今天的日期放在新插入的
    行,或者如果我删除行,比如说 3 行,它将添加日期或
    覆盖刚刚删除的 3 行下面的 3 行中的日期。这是
    不好。如果我在单元格中进行更改,我只想添加一个日期
    本身。当我们添加或更改状态(数据)时,只需自动添加日期
    在它左边的单元格中。
  • 我还需要前 9 行不受此自动日期的影响
    添加。
  • 最后,如果我双击 M 列第 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
    

    最佳答案

    这些修改会处理您的前两个规范。

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

    in-cell-edit_escape

    关于excel - 当对相邻单元格进行更改时,自动填充单元格中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35025432/

    相关文章:

    excel - 查找列是否包含另一列的值?

    javascript - AngularJS - 按钮 - 在依赖之前调用函数或指令

    javascript - 使用 js-xlsx 解析 Excel 中的数据

    sql - excel vba - 在电子表格上查询

    excel - 删除由变量设置的自动过滤器

    excel - 获取文件路径(以文件夹结尾)

    excel - TAB 从 Excel VBA/MACRO 分隔 txt 文件

    arrays - VBA - 带条件的求和数组列 - 像 excel sumif

    arrays - 使用 For Each (Excel VBA) 在目标数组中定位

    excel - "Automation Error: Object Invoked has disconnected from its clients"