在Microsoft Excel中暂停或延迟VBA脚本的方法

在Microsoft Excel中暂停或延迟VBA脚本的方法

在执行下一个代码之前需要暂停 Excel 中的 VBA 脚本吗?

阅读本文直至最后,探索在 Excel 中的 VBA 中添加暂停的最佳方法。

在 Excel 中使用 VBA 脚本时,有时可能需要在代码中引入暂停或延迟。暂停脚本的执行在各种情况下都很有用,例如留出时间进行数据处理、协调操作与外部事件或创建更受控制的操作流程。

虽然 Excel VBA 没有用于暂停脚本的内置功能,但你可以利用以下方法 Application.Wait 或 Windows API Sleep 函数来引入延迟。

本 Excel 教程将指导您完成在 VBA 脚本中实现暂停的过程,使您能够优化 Excel 中的执行流程。

推荐:在Microsoft Excel中运行VBA宏的15种方法

学习如何在 Excel 中暂停 VBA 的原因

以下是需要使用 VBA 暂停策略的情况:

  1. 暂停脚本可以为复杂的计算或数据操作提供时间完成,从而确保结果准确可靠。
  2. 延迟脚本使您能够协调外部事件(例如数据库更新或 Web 服务响应),确保无缝集成和实时数据处理。
  3. VBA 中的暂停使您有时间在继续之前查看信息或做出决定。
  4. 批处理操作之间的延迟脚本可以有效处理大型数据集或对多个对象执行操作,同时控制资源消耗
  5. 在 VBA 脚本中引入延迟有助于创建更可控的操作序列,允许脚本逐步或以特定间隔执行,从而增强整体脚本逻辑和精度。
  6. 当您要执行复杂且长的 VBA 代码列表时,暂停代码一段时间有助于避免笔记本电脑、台式机或服务器过热。
  7. 延迟 VBA 脚本可让您在预定的时间或间隔安排特定操作或事件,从而自动执行任务并提高工作效率

VBA 使用 Application.Wait 函数暂停

假设,当 Excel 执行一批 VBA 代码、暂停几分钟并重复时,您不需要在 Excel 中执行任何操作。在本教程中,我的任务是自动执行从单元格区域复制值的过程 A2:A7C2:C7 并暂停脚本10秒。

然后,Excel 会将 C2:C7 通过价值观 D2:D7 并将结果放入单元格区域 E2:E7。在这两组任务之间,我将使用 Application.Wait 函数让 VBA 等待 10 秒。以下是您可以尝试的步骤:

在Microsoft Excel中暂停或延迟VBA脚本的方法
在Microsoft Excel中暂停或延迟VBA脚本的方法
  1. 创建一个数据集,如上图所示。
编写 VBA 代码来暂停 VBA
  1. Alt + F11 提出 Excel VBA 编辑器
  2. 在那里,点击 插入 并选择 模块 添加一个空白的到 VBA 编辑器 后台。
  3. 在这个空白处 模块,复制并粘贴以下 VBA 脚本:
Sub CopyAndMultiplyDataWithPause()
    Dim sourceRange As Range
    Dim destinationRange As Range
    Dim multiplyRange As Range
    Dim resultRange As Range
    Dim i As Integer
    
    ' Set the source, destination, multiply, and result ranges
    Set sourceRange = Range("A2:A7")
    Set destinationRange = Range("C2:C7")
    Set multiplyRange = Range("D2:D7")
    Set resultRange = Range("E2:E7")
    
    ' Copy data from source range to destination range
    destinationRange.Value = sourceRange.Value
    
    ' Pause for 10 seconds
    Application.Wait Now + TimeValue("00:00:10")
    
    ' Multiply values in destination range by corresponding values in multiply range
    For i = 1 To destinationRange.Cells.Count
        resultRange.Cells(i).Value = destinationRange.Cells(i).Value * multiplyRange.Cells(i).Value
    Next i
    
    MsgBox "Data copied, paused, and multiplied successfully."
End Sub
  1. 节省VBA 编辑器 工具栏并关闭对话框。
运行宏
  1. 现在,按 Alt + F8 打开宏窗口并选择 暂停复制并乘以数据 宏。
  2. 点击 跑步 按钮来执行代码。
最终数据

现在,Excel 将立即执行复制任务,并等待 10 秒钟,然后执行乘法任务并将结果放在 E 栏。在这 10 秒暂停期间,您将无法访问 Excel 应用程序。

在上面的脚本中,我放置了 VBA 暂停代码,即 Application.Wait Now + TimeValue("00:00:10") 在两批 VBA 脚本之间。您还可以按原样复制代码元素,并在两个任务之间将其粘贴到 Excel 中的您自己的 VBA 项目中。如果您需要多次暂停,请根据需要多次插入代码元素。

使用睡眠功能暂停 VBA

Sleep (milliseconds) VBA 的功能还允许您在执行下游代码之前暂停 VBA 特定时间。以下是实现它的代码和步骤:

  1. 按照前面部分所述的步骤 1 至 7 进行操作。
  2. 步骤4,使用与上面相同的代码,但进行以下更改:
    • 复制粘贴上述代码后,点击下拉菜单并选择 声明 并粘贴以下声明:

Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)

宣言
  1. 另外,更换 Application.Wait Now + TimeValue("00:00:10")Sleep (10000)
使用睡眠功能暂停 VBA
  1. 运行 VBA 脚本。
VBA 运行
  1. 您将看到 Excel 复制数据、暂停,然后执行乘法。最后,它还会显示一个消息框。
最终结果

推荐:提高转化率WordPress个性化插件If-So Dynamic Content 

在 VBA 中使用循环函数暂停

如果您需要在暂停期间修改工作表或在 Excel 数据集中输入数据,则上述两种方法不适用。要在暂停期间继续使用 Excel,您可以使用 环形 函数暂停 Excel 中的 VBA。请参阅以下步骤以及 环形 功能。

已删除的数据

在当前数据中,我删除了 Factor 列下的值。我将在 Excel VBA 等待 10 秒后再执行下一个脚本时输入这些值。

为循环函数创建 VBA 脚本
  1. 打开 Excel VBA 编辑器Alt + F11)并创建一个新的 模块 点击 插入 菜单。
  2. 复制并粘贴此 VBA 脚本 填入空白处 模块
Sub CopyMultiplyWithPause()
    Dim sourceRange As Range
    Dim destinationRange As Range
    Dim multiplyRange As Range
    Dim resultRange As Range
    Dim duration As Long
    Dim startTime As Double
    Dim currentTime As Double
    Dim i As Long
    
    ' Set the desired pause duration in seconds
    duration = 10
    
    ' Set the source, destination, multiply, and result ranges
    Set sourceRange = Range("A2:A7")
    Set destinationRange = Range("C2:C7")
    Set multiplyRange = Range("D2:D7")
    Set resultRange = Range("E2:E7")
    
    ' Copy data from source range to destination range
    destinationRange.Value = sourceRange.Value
    
    ' Get the start time
    startTime = Now
    
    ' Pause the script until the specified duration has passed
    Do
        ' Get the current time
        currentTime = Now
        
        ' Exit the loop if the specified duration has passed
        If currentTime >= startTime + (duration / 24 / 60 / 60) Then Exit Do
        
        ' Allow other processes to execute during the pause
        DoEvents
    Loop
    
    ' Multiply values in destination range by corresponding values in multiply range
    For i = 1 To destinationRange.Cells.Count
        resultRange.Cells(i).Value = destinationRange.Cells(i).Value * multiplyRange.Cells(i).Value
    Next i
    
    ' Continue with the rest of your code or perform subsequent actions
    MsgBox "Data copied, paused, and multiplied successfully."
    

End Sub
  1. 点击 节省 并关闭 VBA 编辑器
循环运行宏
  1. Alt + F8 并选择 复制乘法暂停 宏中的 对话框。
  2. 点击 跑步 执行 VBA 代码。
VBA 循环代码运行
  1. 当 VBA 停止 10 秒时,我输入乘法因子值。
  2. 暂停 10 秒后,VBA 脚本恢复并执行最后的乘法任务。
循环代码结果

如果您只需要提取上面使用的循环函数并将其插入到您自己的 Excel VBA 项目的两个脚本之间,请使用以下代码:

  ' Set the desired pause duration in seconds
    duration = 10    

startTime = Now
    
    ' Pause the script until the specified duration has passed
    Do
        ' Get the current time
        currentTime = Now
        
        ' Exit the loop if the specified duration has passed
        If currentTime >= startTime + (duration / 24 / 60 / 60) Then Exit Do
        
        ' Allow other processes to execute during the pause
        DoEvents
    Loop

结论

这些都是在 Excel 工作簿上暂停或延迟 VBA 脚本的常用方法。

如果在 VBA 代码延迟时不需要与 Excel 交互,那么您可以使用 应用程序.等待睡觉 基于函数的方法。这些方法主要帮助您在运行大型 VBA 脚本时有效地分配 PC 资源。

否则,如果您继续使用大型 VBA 代码,您的 PC 可能会挂断,并且您将无法使用其他应用程序,如网络浏览器或计算器。

相反,如果您需要在 VBA 脚本暂停时在 Excel 工作表中输入数据,则应尝试基于循环函数的方法。它可以暂停代码的执行,直到您在 Excel 中重新构造或输入数据,然后继续完成代码。该方法更适合于 你需要在 Excel 中自动执行许多其他任务。

您知道 VBA 中的其他暂停或延迟方法吗?请在评论中告诉我!

推荐:使用Excel查找平均值的10种方法


发表评论