【问题标题】:Pause Outlook for a given amount of time将 Outlook 暂停给定的时间
【发布时间】:2025-11-23 19:05:01
【问题描述】:

我正在尝试在收到电子邮件 10 秒后运行 Outlook 代码。

我尝试使用 application.wait,但您似乎无法使用 Outlook 执行此操作。

如何在给定的时间内暂停 Outlook?

【问题讨论】:

  • 是 32 位还是 64 位 Office?

标签: vba outlook


【解决方案1】:

您可以创建一个模仿 Application.Wait 的 Sub,类似于。

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'For 64-Bit
'Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Sub Pause(intSeconds As Variant)
  ' Comments: Waits for a specified number of seconds
  ' Params  : intSeconds      Number of seconds to wait
  ' Source  : Total Visual SourceBook

On Error GoTo PROC_ERR

    Dim datTime As Date
    datTime = DateAdd("s", intSeconds, Now)
    Do
        ' Yield to other programs (better than using DoEvents which eats up all the CPU cycles)
        Sleep 100
        DoEvents
    Loop Until Now >= datTime
PROC_EXIT:
    Exit Sub

PROC_ERR:
    MsgBox "Error: " & Err.Number & ". " & Err.Description, , "Pause Method"
    Resume PROC_EXIT
End Sub

要调用它,您可以使用Pause 3

【讨论】:

  • 出于某种原因,它也不允许我使用睡眠功能,所以这是不行的。任何想法为什么这样做?
  • 您可能需要将库包含到 sleep 函数中。试试修改后的代码。
  • 完美,在您编辑代码之前它不起作用,但现在可以了。非常感谢。请问是什么问题?
  • Windows 提供了一个名为Sleep 的API 函数,用于挂起当前进程线程。如果不包含声明,编译器不知道如何处理 Sleep。首先,我没有包含 Sleep 函数的显式声明。现在我们已经添加了它,它可以工作了。
  • 但是“等待”去了哪里?
【解决方案2】:

这里有一个简单的方法:

    T0 = Now + TimeValue("0:00:10")
    Do Until Now > T0
    Loop

【讨论】:

  • 我不认为这是一个好主意,这是一个busy wait,你应该把一些sleep放在那里。
【解决方案3】:

在这里面扔一个 DoEvents 就可以了

T0 = Now + TimeValue("00:00:10")

Do Until Now > 10

  DoEvents

Loop

【讨论】:

    【解决方案4】:

    我不确定是否需要复杂的功能..

    试试这个:

    #If VBA7 Then
    'Code is running VBA7 (2010 or later).
    
         #If Win64 Then
         'Code is running in 64-bit version of Microsoft Office.
          Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
         #Else
         'Code is running in 32-bit version of Microsoft Office.
          Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
         #End If
    
    #Else
    'Code is running VBA6 (2007 or earlier).
    
    #End If
    
    Sub Test()
     Debug.Print Now
     Sleep 10000
     Debug.Print Now
    End Sub
    

    【讨论】:

      最近更新 更多