VBA Microsoft Excel 中的 Now 函数

2025年2月28日 | 阅读 20 分钟

众所周知,在 VBA(Visual Basic for Applications)中,“Now 函数”被认为是负责从系统检索当前日期和时间的根本工具。它主要在 Microsoft Office 应用程序(包括 Microsoft Excel、Access 和 Word)中的各种自动化流程中发挥重要作用。VBA 通常用于高效地简化任务、管理数据和执行计算。该函数以 **Date 数据类型**返回日期和时间,提供了调用时的精确瞬间快照,这在需要精确计时以有效跟踪、记录或更新数据时尤其有用。与仅负责返回日期的 **Date 函数**或用于检索时间的 **Time 函数**不同,Now 函数主要结合了两个信息——当前日期和当前时间,从而提供了一个全面的时间戳。这种双重功能使其在需要日期和时间的场景中非常有用,例如记录过程或事件的开始或结束,同时管理所选电子表格中的时间敏感操作。

VBA Now Function in Microsoft Excel

尽管如此,“Now 函数”最常用于自动将时间戳插入到需要所选数据集实时更新的 Microsoft Excel 表格、Access 数据库或其他文档中。例如,它可以自动记录数据输入的确切时刻、生成报告的时刻或任务完成的时刻。这可以提高数据管理中的准确性和效率,并最大限度地减少手动输入的需求,从而降低人为错误的潜在可能。

此外,Now 函数经常在基于时间的计算中使用,其中将当前日期和时间与存储值进行比较至关重要。在计划、跟踪或截止日期管理系统中尤其如此。

  • 例如,此函数允许用户轻松测量两个事件之间经过的时间或计算距离截止日期还有多少时间。因此,通过将Now集成到 VBA 宏中,程序员可以轻松构建更动态、更响应式的工作流,以适应当前时刻。

在本教程中,我们将学习 Microsoft Excel 中VBA NOW函数 的概念,并通过各种示例来促进 NOW 函数的使用。

Microsoft Excel 中的 VBA NOW 函数是什么意思?

俗话说,VBA(Visual Basic for Applications)中的“NOW 函数”专门用于从系统获取当前日期和时间。与 Microsoft Excel 中的 NOW 函数一样,它不需要任何参数。我们可以通过键入 NOW 函数来直接使用它,无论是否带括号,它将分别返回当前的日期和时间。

VBA Now Function in Microsoft Excel

但是,在 Microsoft Excel 中,NOW 函数的工作方式类似。它也不接受任何参数,并在被调用时返回系统当前的日期和时间。虽然 VBA 中的DATE函数仅返回当前日期,但 NOW 函数同时提供日期和时间,这在许多情况下也很有用。

  • 例如,如果我们想跟踪事件何时发生或需要计算时间间隔,NOW 函数将为我们提供系统中的确切日期和时间。这使得自动化依赖于实时信息的流程变得容易。
VBA Now Function in Microsoft Excel
VBA Now Function in Microsoft Excel

如果我们正在使用 Microsoft Excel 或 VBA 并需要引用当前的日期和时间,那么 NOW 函数是一个简单而有效的工具。尽管如此,我们无需担心添加任何参数或复杂的公式——只需调用该函数,我们就会立即获得系统当前的日期和时间。总而言之,当我们想要自动化需要当前日期和时间的任务时,NOW 函数非常有用,它提供了一种无需额外编码即可从系统提取此信息的简单方法。

VBA Excel 中 NOW 函数的语法

语法

在此语法中,我们通常不向Now 函数传递任何参数——它始终称为Now()。当我们运行此函数时,它会在代码执行的那一刻给出确切的日期和时间。

示例


VBA Now Function in Microsoft Excel
VBA Now Function in Microsoft Excel

在这个简单的宏中,当我们实际运行ShowDateTime时,会弹出一个消息框,显示类似“26/09/2024 14:18:54”的内容(确切的日期和时间格式主要取决于我们的系统)。

它在 Excel 中的工作原理

  • 日期:Microsoft Excel VBA 中的Now 函数通常会检索当前日期(例如,“2024 年 9 月 26 日”)。
  • 时间:它还会获取我们使用的系统的当前时间(例如,“下午 3:30”)。

用途

这在需要为事件添加时间戳的应用程序中非常有用,例如在记录数据或记录宏中执行特定操作的时间时。

优点

在 Microsoft Excel 中使用 VBA Now 函数的各种优点如下:

VBA Now Function in Microsoft Excel
  1. 自动添加日期和时间:Microsoft Excel 中的 VBA Now 函数主要帮助我们自动记录当前日期和时间。这在使用我们必须跟踪所选电子表格何时执行了某项操作(例如,何时输入了数据或完成了任务)时尤其有用。该函数会为我们完成,而不是让我们自己输入日期和时间。这将节省我们的时间并确保信息始终准确。
  2. 实时更新以进行计算:使用NOW 函数的一个重要之处在于它通常提供实时更新。让我们想象一下,我们正在处理一份需要显示最新数据的财务报告,或者我们正在跟踪自某个事件以来已经过去多长时间。Now函数可以成为公式的一部分,这些公式将持续更新为当前的日期和时间。这意味着我们的计算将始终反映最新的信息,这在我们被要求有效地根据实时数据做出快速决策时尤其有用。
  3. 增强用户体验:我们还知道,Now函数可以使我们的 Microsoft Excel 应用程序更用户友好。
    • 例如,如果我们正在创建一个仪表板或表单,显示当前的日期和时间可以为用户提供上下文,例如显示报告最后更新的时间。这最终将通过使电子表格感觉更具交互性和响应性来改善整体用户体验。
  4. 高效的任务自动化:通过 VBA,我们可以轻松地自动化许多任务,而Now 函数通常在基于时间的自动化中发挥着重要作用。例如,我们可以将其编程为在特定时间触发操作,例如发送提醒、刷新数据或每小时生成报告。这将减少手动干预的需要,从而帮助我们简化重复性任务并更高效地工作。

总而言之,VBA Now 函数是一个强大的工具,用于自动化与日期和时间相关的任务,提高准确性,并在我们选定的 Microsoft Excel 电子表格中提供实时信息。

如何使用 Microsoft Excel VBA NOW 函数?

为了有效演示如何在 Microsoft Excel VBA 中使用Now函数,我们需要遵循各种提到的步骤。以下示例将帮助我们创建一个简单的数字时钟,该时钟将在所选单元格中持续更新当前数据。

VBA Now Function in Microsoft Excel

步骤 1:打开 Excel 工作簿:首先,我们需要打开一个 Excel 工作簿。然后,我们需要访问工具栏中提供的“开发工具”选项卡,其中包含处理 VBA 的工具。

  1. 如果“开发工具”选项卡不可见,我们必须通过单击文件 > 选项来启用它。
  2. 在“Excel 选项”窗口中,我们需要选择自定义功能区
  3. 在右侧,我们必须在“主选项卡”部分勾选“开发工具”复选框,然后单击确定选项。
VBA Now Function in Microsoft Excel

现在,“开发工具”选项卡已可用,我们将打开 VBA 代码编辑器。

  1. 为此,我们单击工具栏中的“开发工具”选项卡。
  2. 接下来,我们必须单击 Visual Basic 图标。此操作将打开 VBA 代码编辑器,我们将在其中创建和编辑我们的代码。
VBA Now Function in Microsoft Excel

步骤 2:插入新模块:现在,在此步骤中,我们将创建一个模块来编写我们的代码。

  1. 在编辑器中,我们将单击菜单栏中的插入选项。
  2. 之后,我们需要从下拉列表中选择模块。这将创建一个新模块,允许我们编写 VBA 子程序和函数。
VBA Now Function in Microsoft Excel

步骤 3:初始化数字时钟的子过程

在此步骤中,我们将主动创建一个子过程,该过程将有效地利用Now函数在 Microsoft Excel 中显示当前时间。

1. 从定义子过程开始。我们必须在所选模块中键入以下代码:

代码


VBA Now Function in Microsoft Excel

这行代码主要初始化一个名为UpdateDigitalClock的新子程序。

步骤 4:设置 Do Loop:在此步骤中,我们将设置一个Do Loop,该循环将不断更新显示的时间。因此,在子程序内部,我们需要键入Do来启动循环。

代码


VBA Now Function in Microsoft Excel

这将允许代码反复运行。

步骤 5:将当前时间打印到 A1 单元格:在此特定步骤中,在循环内部,我们将将当前时间打印到名为NOW_Use的工作表单元格 A1。

代码


VBA Now Function in Microsoft Excel

此外,此特定代码将把当前的日期和时间分配给 A1 单元格。

步骤 6:将循环延迟一秒:在此步骤中,为了使时钟每秒更新一次,我们需要通过使用Wait 函数来暂停循环一秒:

代码


VBA Now Function in Microsoft Excel

这行代码通常会导致循环在再次开始之前等待一秒钟,从而有效地提供准确的结果。

代码

步骤 7:运行子程序:编写完 VBA 代码后,是时候有效地运行选定的代码子程序并有效地监控输出了。

  • 为此,我们首先需要关闭 VBA 编辑器,然后返回到 Microsoft Excel 工作簿。
  • 之后,我们需要确保我们在工作簿中有一个名为NOW_Use的工作表。
  • 为了运行宏,我们将单击后单击相应的开发工具选项卡。
  • 选择UpdateDigitalClock子程序,然后单击运行选项。
VBA Now Function in Microsoft Excel
VBA Now Function in Microsoft Excel

一分钟后,

VBA Now Function in Microsoft Excel

一分钟后,

VBA Now Function in Microsoft Excel

这被认为是一个简单的示例,通常用于说明 VBA Now 函数的用法。

Microsoft Excel VBA 中 NOW 函数的示例

现在,让我们来看一些有趣的示例,其中Now ()函数可以在实际应用中有效使用,以有效的方式完成任务。

# 示例 1:捕获当前日期和时间。

Microsoft Excel VBA 中的Now () 函数有效地用于在发生特定操作时捕获当前的日期和时间。在此示例中,我们将创建一个系统来记录特定单元格更新的确切时间。这对于跟踪更改和维护 Microsoft Excel 中的更新记录非常有帮助。

现在,让我们逐步完成以有效实现此目的:

步骤 1:访问 VBA 编辑器

1. 首先,我们需要打开我们实际要跟踪更改的 Microsoft Excel 工作簿。

VBA Now Function in Microsoft Excel

2. 之后,我们必须右键单击我们想在此处有效记录所有更改的表。

VBA Now Function in Microsoft Excel

3. 从屏幕的下拉菜单中,我们将单击“查看代码”。这将为该特定工作表打开 VBA 编辑器。

步骤 2:声明一个私有子程序:现在我们已经打开了 VBA 编辑器,我们必须通过声明一个子程序来开始这一步。

代码


VBA Now Function in Microsoft Excel

这行代码通常会设置一个过程,当在相应选定的工作表中进行更改时,该过程将自动运行。

步骤 3:定义用于监视更改的目标单元格:在此步骤中,我们必须告诉 Microsoft Excel 我们实际要监视哪个特定单元格以进行更改。为此,我们将创建一个范围来有效存储该特定单元格的值。

代码


VBA Now Function in Microsoft Excel

通常,这行代码将TargetCell声明为一个范围,然后将其分配给当前工作表上的“B1”单元格(即Me.Range("B1"))。Me 关键字通常指代当前工作表。

步骤 4:设置用于记录更改的单元格范围:此时,我们将指定我们实际要跟踪的相应单元格或特定单元格范围。在此案例中,我们分别跟踪在“B1”单元格中发生的更改。

步骤 5:编写 IF 条件以触发 Now 函数:现在目标单元格已设置并准备就绪,我们必须添加逻辑以确保Now() 函数仅在更改该单元格时触发。If 语句将有效地处理此问题。

代码


VBA Now Function in Microsoft Excel

相应的If 条件检查 Target(发生更改的单元格)是否与相应的TargetCell(单元格“B1”)相交。它还确保TargetCell不为空。如果两个条件都为真,则使用Now() 函数将当前日期和时间插入“C1”单元格。

步骤 6:测试代码:现在代码已完成,我们将返回到 Microsoft Excel 工作表。尝试在“B1”单元格中输入一个值。为此,我们应该会看到当前日期和时间出现在“C1”单元格中。每次在“B1”单元格中进行更改时,代码将自动在“C1”单元格中记录更改时间。

这是相应示例的完整代码:

代码

通过遵循上述所有步骤,我们可以成功地在 Microsoft Excel VBA 中实现一个系统,该系统可以记录对特定单元格进行更改的确切时间。这种方法在必须跟踪对所选工作所做的更新或修改的场景(例如在协作工作环境中或处理时间敏感数据时)中非常有用。

# 示例 2:测量用户在 Excel 工作表中单击按钮两次之间的时间。

现在,为了测量用户窗体中按钮两次单击之间的时间,使用 Microsoft Excel VBA,我们只需遵循以下步骤。此过程主要允许我们有效地捕获按钮首次单击到再次单击之间的时间。

步骤 1:在 Microsoft Excel VBA 中创建用户窗体:首先,我们需要在 Microsoft Excel VBA 中创建用户窗体。

1. 首先,我们需要打开 Microsoft Excel。

VBA Now Function in Microsoft Excel

2. 之后,我们必须访问 VBA 编辑器。这可以通过按Alt + F11来完成。此快捷方式将打开 Visual Basic for Applications (VBA) 编辑器。

VBA Now Function in Microsoft Excel

3. 然后,在 VBA 编辑器中,我们将转到顶部菜单,单击插入选项,然后选择用户窗体

VBA Now Function in Microsoft Excel

步骤 1a:执行上述步骤后,我们将看到一个空白的用户窗体出现在编辑器中。通常,此窗体是我们的工作区,我们将在此处添加控件,例如按钮和标签。

VBA Now Function in Microsoft Excel

4. 自定义用户窗体:我们可以有效地调整窗体大小,更改其背景颜色,或设置标题。要实现这一点,我们需要选择用户窗体,然后在属性窗口中修改其属性,该窗口通常位于编辑器的左侧。

VBA Now Function in Microsoft Excel

步骤 1b:在进行更改后,相应的用户窗体应反映我们的自定义设置,从而赋予它独特的外观和感觉。

VBA Now Function in Microsoft Excel

步骤 2:创建标签并自定义其属性:现在,在此特定步骤中,我们需要添加一个标签来向用户提供说明。

1. 添加标签:在工具箱中(如果未显示,请转到视图 > 工具箱),我们将选择标签控件,然后单击并拖动用户窗体以创建标签。

VBA Now Function in Microsoft Excel

步骤 2a:添加标签后,我们可以通过更改其属性轻松自定义它。

  • 例如,将 Caption 属性更改为“单击按钮开始计时。
VBA Now Function in Microsoft Excel

通常,此特定标签将指示用户在看到用户窗体时应执行的操作。

步骤 3:添加命令按钮:在此步骤中,我们需要有效地添加一个按钮,用户可以单击该按钮来启动计时器。

1. 添加命令按钮:在相应的工具箱中,我们必须选择它并将其有效地拖到用户窗体上。

然后,此按钮将作为启动和停止计时器的触发器。

VBA Now Function in Microsoft Excel

2. 自定义命令按钮:在此步骤中,我们只需单击按钮并将 Caption 属性更改为“开始计时。”。编辑完成后,我们的用户窗体现在应该会显示标签和按钮。

VBA Now Function in Microsoft Excel

但是,此设置将使用户窗体具有交互性并准备好接收用户输入。

步骤 4:声明一个日期变量:在为按钮编写代码之前,我们需要声明一个日期变量来存储第一次单击的时间。

1. 声明变量:在代码模块的顶部,在任何过程之外,我们需要添加以下代码行:

VBA Now Function in Microsoft Excel

步骤 4:上述声明将允许StartTime在多次单击之间保留其值。

步骤 5:检查和设置开始时间:现在,在此步骤中,我们将编写按钮单击时将运行的代码。

  1. 打开按钮的 Click 事件:我们只需双击创建的 CommandButton 即可打开其单击事件的代码窗口。
  2. 编写 Click 事件代码:通常,在CommandButton1_Click过程中,我们将添加以下代码:

代码


VBA Now Function in Microsoft Excel

上述相应代码检查StartTime是否为零。如果是,它会将当前时间(使用 Now)分配给StartTime,并显示一个消息框,指示计时器已启动。

步骤 5:添加第二次单击的代码:现在,在相应的Else 块中,我们将编写将有效地在第二次单击按钮时执行的代码。

1. 完成 Else 块:为此,我们需要在单击事件的Else部分中添加以下代码行:

代码


VBA Now Function in Microsoft Excel
VBA Now Function in Microsoft Excel

步骤 6:此代码通过从当前时间减去StartTime来计算自第一次单击以来经过的时间。然后,它以小时、分钟和秒的格式在消息框中显示经过的时间。最后,它将StartTime重置为零,以有效地为下一次测量做准备。

VBA Now Function in Microsoft Excel

两次单击之间大约过去了 46 秒。

此外,此特定过程允许我们仅通过在用户窗体中使用 Excel VBA 来创建一个简单的计时器。我们可以通过一次单击按钮启动计时器,通过第二次单击停止计时器,从而显示两次单击之间经过的时间。此特定示例有效地演示了 VBA 的基本功能,并为 Microsoft Excel 中的更复杂应用程序奠定了基础。

Timer 函数的替代方法

在处理 VBA(Visual Basic for Applications)时,大多数用户通常依赖Timer 函数来测量时间间隔,方法是返回自午夜以来的秒数。虽然这对于基本计时需求已经足够,但在许多情况下我们需要更高的精度,例如测量毫秒甚至微秒。尽管如此,我们也有几种提供更高精度和灵活性的替代方法。

用于精确计时的 Windows API 函数

如果我们实际上正在寻找比“Timer 函数”能有效提供的更精确的计时,那么让我们考虑使用Windows API 函数,它们就是GetTickCountQueryPerformanceCounter。这两个函数都能让我们以更高的精度来测量时间。

  • GetTickCount:Excel VBA 中的这个函数通常告诉我们自系统启动以来经过了多少毫秒。通常,它非常直接易用,并且还提供毫秒级的计时,这使其适用于大多数应用程序。然而,值得注意的是,它可能无法提供与QueryPerformanceCounter相同的精度。
  • QueryPerformanceCounter:对于那些需要更高精度的人来说,那么在这种特定情况下,QueryPerformanceCounter就是最佳选择。然而,这个函数通常可以以微秒级的精度测量时间间隔,这在精确计时至关重要的场景中尤其有用。

通过使用 Now 函数

另一个最直接的选择是Now 函数,它为我们提供了当前的日期和时间。我们可以使用此函数来有效地计算一段代码通常需要多长时间才能运行。为了实现这一点,我们将在代码运行之前捕获开始时间,然后在代码完成后检查结束时间。这两个时间之间的差异将告诉我们代码执行了多长时间。

下面是一个简单的例子

然而,这种特定方法对于较长的任务效果很好,但由于缺乏毫秒精度,它可能不是测量极短时间间隔的最佳选择。

SetTimer 和 KillTimer 函数

如果我们被要求安排动作或事件在一定时间间隔后发生,那么在这种情况下,我们可能需要查看 Windows API 中的“SetTimer 和 KillTimer 函数”。所有这些函数主要允许我们设置一个计时器,该计时器将在特定毫秒数后有效地触发,从而提供比内置 VBA 方法更有效的灵活性。

  • SetTimer:这个函数通常有助于在特定毫秒数后调用指定过程的计时器的有效创建。这对于创建重复任务或延迟而不会完全停止我们的代码特别有用。
  • KillTimer:如果我们不再需要计时器,那么在这种情况下,我们可以有效地使用KillTimer来停止它。这将有助于我们确保我们的程序顺利运行,而没有不必要的后台进程。

使用 Wait 和 Sleep 函数暂停

如果我们被要求将代码暂停特定时间,那么在这种特定情况下,我们可以在 Microsoft Excel VBA 中有效地使用 Wait 和 Sleep 函数。

  • Wait:此函数主要允许我们暂停执行指定秒数。它非常易于使用,但它只允许整秒,如果我们需要较短的延迟,这可能不合适。
  • Sleep:然而,Sleep 函数有助于我们暂停执行指定毫秒数,从而实现更精确的延迟。这在我们需要短暂等待片刻然后继续执行的情况下特别有用。

这是一个使用 Sleep 函数的示例:

并且众所周知,Wait 和 Sleep 函数在有效创建延迟方面非常方便,但要小心不要过度使用它们,因为它们会完全中断我们程序的执行。

创建自定义计时函数

如果我们想在我们的代码中完全控制计时,那么在这种情况下,我们可以轻松地创建自定义计时函数。所有这些函数都可以测量特定过程从开始到结束所花费的时间,并且可以有效地定制以满足我们特定的需求,而不会出现任何延迟。

这是一个创建自定义计时函数的简单示例:

此外,在此示例中,该函数使用Timer 函数来跟踪代码何时开始和结束,然后计算时间差。我们还可以根据我们的计时需求进一步增强此函数。虽然 Microsoft VBA 中的 Timer 函数对于基本的计时任务非常有用,但我们有几种替代方法可供选择,它可以提供更高的精度和控制。无论我们选择GetTickCountQueryPerformanceCounter等 Windows API 函数,使用内置的Now函数,还是有效地创建我们自己的自定义函数,我们都可以有效地测量和管理 VBA 项目中的时间。

需要注意的事项

在使用 Microsoft Excel 中的 VBA Now 函数时需要记住的各种重要事项如下:

  1. 我们应该始终确保计算机的日期和时间设置准确,因为Now ()函数通常仅依赖于这些设置。
  2. 并且应该记住,我们应该确保我们存储Now ()函数结果的变量和单元格被格式化为日期/时间数据类型,以便有效地正确显示信息。
  3. 通常,相应的Now () 函数主要负责在调用时捕获日期和时间。如果我们将其结果存储在变量中,它将不会自动更新。
  4. Now ()函数主要提供秒级精度。
  5. 在 Microsoft Excel 中,如果我们将在 Now () 放在单元格中,它将在工作表有效重新计算时更新。
  6. 该函数提供了一种记录事件时间戳、跟踪实时进度和执行基于时间的逻辑的方法。

下一个主题Vba-overflow-error