在VBA中调用Sleep("time")

问题描述 投票:0回答:1

在 VBA 中,我使用

Call Sleep(TIME)
,其中
TIME
是大约 10 毫秒的值。在 Office 2003 上运行良好,现在我有 Office 2019,并且出现错误消息“子或函数未定义”。哪里可以找到这个功能?

我定义了

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

但因错误而被拒绝

vba sleep undefined-function
1个回答
-1
投票

尝试在 Office 2019 中使用 VBA 中的 Sleep 函数时出现错误消息“Sub 或 Function not Define”,表示该函数无法识别,因为尚未正确声明该函数。 Sleep 函数是一个 Windows API 函数,而不是内置的 VBA 函数,因此您需要先声明它,然后才能在 VBA 代码中使用它。

鉴于您使用的是 Office 2019(可能是 64 位版本),您应该在声明中使用 PtrSafe 关键字以确保兼容性。以下是如何正确声明 64 位版本 Office 的睡眠函数:

#If VBA7 Then
   Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
   Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

此代码检查 VBA 版本是否为 7 或更高版本(Office 2010 及更高版本的情况,包括 Office 2019),并使用 PtrSafe 关键字实现 64 位兼容性。如果 VBA 版本低于 7,则会回退到非 PtrSafe 声明。

如上所示声明 Sleep 函数后,您可以在 VBA 代码中使用它,如下所示:

Sleep 10 ' Pauses the execution for 10 milliseconds

确保将声明放置在模块顶部、任何子例程或函数之外,以便在整个代码中都可以访问它。

此方法应解决“未定义子或函数”错误,并允许您在 Office 2019 的 VBA 代码中使用睡眠函数

© www.soinside.com 2019 - 2024. All rights reserved.