Excel 从VBA代码进行异步Rest调用的最佳方法是什么

Excel 从VBA代码进行异步Rest调用的最佳方法是什么,excel,vba,Excel,Vba,我想在后台从excel宏进行rest调用[post/get]。宏应每5秒静默执行一次。如果rest调用得到有效响应,则向用户显示一些消息。 注意:当宏在后台异步运行时,它不应中断excel上的用户体验 我使用了回调方法,但问题是excel很慢,因为宏使rest调用在后台连续运行。下面是代码FYR 'MyReadyStateHandler class module Sub OnReadyStateChange() DoEvents If Actions.docx.readyStat

我想在后台从excel宏进行rest调用[post/get]。宏应每5秒静默执行一次。如果rest调用得到有效响应,则向用户显示一些消息。
注意:当宏在后台异步运行时,它不应中断excel上的用户体验
我使用了回调方法,但问题是excel很慢,因为宏使rest调用在后台连续运行。下面是代码FYR

'MyReadyStateHandler class module
Sub OnReadyStateChange()    
DoEvents    
If Actions.docx.readyState = 4 Then    
If Actions.docx.Status = 200 Then    
IsReadyState = True    
outPutText = Actions.docx.responseText    
Exit Sub     
Else     
IsReadyState = False    
Exit Sub    
End If    
End If    
End Sub    
_________________________
'Sub using MyReadyStateHandler
Public sub TestRestServiceStatus()   
Set MyOnReadyStateWrapper = New MyReadyStateHandler    
Set docx = New MSXML2.XMLHTTP60    
docx.OnReadyStateChange = MyOnReadyStateWrapper    
docx.Open "POST", urlString, False    
docx.send jsonBody    
responceStatus = MyOnReadyStateWrapper.IsReadyState     
If (responceStatus = True) Then    
Dim notificationOutPut As String 
notificationOutPut=MyOnReadyStateWrapper.outPutText    
If InStr(notificationOutPut , "PROCESSING") > 0 Then    
Call TestRestServiceStatus    
ElseIf  InStr(notificationOutPut , "COMPLETE") > 0 Then    
'Notify User on Excel    
EndIF    
EndIf    
End sub  

请编辑您的问题以包含正确格式的代码。您在图像中显示的代码不是VBA,没有人会为您手动复制。我只想显示我使用的引用,因此附加了图像。。不管怎样,我现在编辑。。谢谢,如果你这么做,你会崩溃的。当您从自身调用Sub时,它不会简单地重新启动,而是添加到堆栈中,您将很快耗尽堆栈空间。此外,您通知用户的部分将针对堆栈中的每个子实例运行。好的,那么关于如何执行此操作的任何说明,是否可以使用VBA执行此操作?对于repetead运行,请使用
Application.OnTime Now+TimeValue(“00:00:05”),“TestRestServiceStatus”
在接头的完成阶段的某个地方,系统将反复启动接头。(您需要以某种方式停止此循环…)并且您应该销毁
MyReadyStateHandler
对象,因为您将以720/小时的速度构建。请编辑您的问题以包含正确格式的代码。您在图像中显示的代码不是VBA,没有人会为您手动复制。我只想显示我使用的引用,因此附加了图像。。不管怎样,我现在编辑。。谢谢,如果你这么做,你会崩溃的。当您从自身调用Sub时,它不会简单地重新启动,而是添加到堆栈中,您将很快耗尽堆栈空间。此外,您通知用户的部分将针对堆栈中的每个子实例运行。好的,那么关于如何执行此操作的任何说明,是否可以使用VBA执行此操作?对于repetead运行,请使用
Application.OnTime Now+TimeValue(“00:00:05”),“TestRestServiceStatus”
在接头的完成阶段的某个地方,系统将反复启动接头。(您需要以某种方式停止此循环…)并且您应该在某个地方销毁
MyReadyStateHandler
对象,因为您将以720/小时的速度构建。