【发布时间】:2025-11-23 19:05:01
【问题描述】:
我正在尝试在收到电子邮件 10 秒后运行 Outlook 代码。
我尝试使用 application.wait,但您似乎无法使用 Outlook 执行此操作。
如何在给定的时间内暂停 Outlook?
【问题讨论】:
-
是 32 位还是 64 位 Office?
我正在尝试在收到电子邮件 10 秒后运行 Outlook 代码。
我尝试使用 application.wait,但您似乎无法使用 Outlook 执行此操作。
如何在给定的时间内暂停 Outlook?
【问题讨论】:
您可以创建一个模仿 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 的API 函数,用于挂起当前进程线程。如果不包含声明,编译器不知道如何处理 Sleep。首先,我没有包含 Sleep 函数的显式声明。现在我们已经添加了它,它可以工作了。
在这里面扔一个 DoEvents 就可以了
T0 = Now + TimeValue("00:00:10")
Do Until Now > 10
DoEvents
Loop
【讨论】:
我不确定是否需要复杂的功能..
试试这个:
#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
【讨论】: