在 VBA 中,我使用
Call Sleep(TIME)
,其中 TIME
是大约 10 毫秒的值。在 Office 2003 上运行良好,现在我有 Office 2019,并且出现错误消息“子或函数未定义”。哪里可以找到这个功能?
我定义了
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
但因错误而被拒绝
尝试在 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 代码中使用睡眠函数