创建一个宏,自动更新时间和日期,但在我输入其他单元格时不会更改

创建一个宏,自动更新时间和日期,但在我输入其他单元格时不会更改

我的工作单位有一份 CSR 表,我们用它来自助服务。我们的想法是,每天接听电话时填写每一行,然后通过电子邮件发送给我们的老板。我在底部放了一张表格示例。

然而,我遇到的问题是我们填写这些行非常快(大约每分钟一次),而对于我和其他用户来说,继续输入时间和日期感觉是多余的(因为日期值当然是全天相同的)。

所以我尝试使用Now()工作表函数,但时间是动态的,所以每次我开始新的一行时,所有时间都会更新。我尝试在这里阅读有关 VBA 的内容,但我就是不明白。

我的问题是:当我将数据放入 E、F 和 G 列时,如何让此电子表格输入日期和时间并使其在 C 和 D 列中保持静态?这样我们就不必自己手动输入了?

这是示例:

A C F G H
1 代理名称 导师 日期 时间           您收到回拨了吗? 您是否已验证 HIPPA ? 你们提供自助服务吗?
2 亚历克斯 丽贝卡 2022 年 12 月 14 日 下午 4:34 是的 是的 是的
  ︙    ︙

[转录自这个图片]

我正在尝试找到一种方法来尽可能优化流程!手动输入日期和时间会导致生产速度变慢并出现错误。许多用户受教育程度不高或年事已高,可能难以掌握Ctrl+; 和 Ctrl++Shift;

答案1

无意冒犯,但:你有多懒?如果你输入Ctrl+;(在 C 列中),Excel 将插入当前日期作为静态值。  键入Tab(或 )(移至 D 列),然后Ctrl+ Shift+;插入当前时间。

参考:在单元格中插入当前日期和时间(Microsoft 支持)

答案2

创建此 VBA 例程:

Private Sub Worksheet_Change(ByVal Target As Range)

    Static recursive As Integer
    Dim cur_row As Integer
    Dim cur_time
    Const date_col As Integer = 3
    Const time_col As Integer = 4

    cur_row = Target.Row
    If recursive = 0 And Cells(cur_row, date_col) = "" And Cells(cur_row, time_col) = "" Then
        recursive = 1
        cur_time = Now()
        Cells(cur_row, date_col) = Int(cur_time)
        Cells(cur_row, time_col) = cur_time - Int(cur_time)
        Cells(cur_row, date_col).NumberFormat = "m/d/yyyy"
        Cells(cur_row, time_col).NumberFormat = "h:mm AM/PM"
        recursive = 0
    End If
End Sub

每次更改任何单元格时都会调用它。 

  • 例程中的赋值语句Worksheet_Change会更改工作表,因此会触发对例程的递归调用。我们使用recursive变量来检测这种情况并防止递归执行。
  • 声明当前行和当前日期/时间的变量。
  • 声明整型常量来指定日期列(C)和时间列(D)。
  • 设置cur_row为包含已更改单元格的行。
  • 如果不是递归调用,并且当前行中的日期和时间为空,则
  • 获取当前日期/时间(Excel 日期/时间值,即整数日期加上天数的分数)。
  • 将日期单元格(在当前行)设置为今天的日期(的整数部分cur_time)。
  • 将时间列设置为小数残差(时间;0 = 午夜,0.25 = 早上 6 点,0.5 = 中午,0.75 = 下午 6 点,等等)。一旦输入这些值,它们就是静态的。
  • 设置单元格的格式。

请注意,这只会在第一次修改行时执行该操作(除非用户清除 C和 D列)。如果用户同时更改多行中的单元格,则只会处理第一个单元格。

您可能需要考虑隐藏列C和 D,以便用户不会对它们感到困惑,并且不需要明确跳过它们。

如何在 MS Office 中添加 VBA?是开始使用 VBA 机制的有用参考。

相关内容