我在Excel VBA中使用异步WinHTTP来拍摄对网站的请求。收到回复后,将调用一个模块,该模块将写入表单。
如果用户不关注Excel,则会出现错误
"运行时错误"50290":应用程序定义错误或对象定义错误"。
在线:
pcol = ThisWorkbook.Worksheets("WHA").Cells.Find("PRODUCTA").Column
我也尝试了以下语法:
pcol = Sheet3.Cells.Find("PRODUCTA").Column
pcol = Sheet3.Rows(5).Find("PRODUCTA").Column
pcol = Sheet3.Rows(5).Find(What:="PRODUCTA").Column
pcol = Sheets("WHA").Cells.Find(What:="PRODUCTA", LookAt:=xlWhole, LookAfter:=Sheet3.Cells(5, 1)).Column
我可以在VBA中强制将焦点放回Excel上,但理想情况下,我不介意宏是否在后台运行。
您可以尝试捕获错误并继续执行代码,这可能会有所帮助。
Sub Test()
...declarations...
On Error Goto Error_
...your code...
Exit Sub
Error_:
If (Err.Number = 50290) Then Resume
Stop
Resume
End Sub
AppActivate "Microsoft Excel"
或者当你知道你有焦点时存储你的WB,并在后激活它
在运行宏时,尝试将这两个标志设置为false:
Application.ScreenUpdating = False
Application.DisplayAlerts = False
我也遇到过这个错误,但在另一种情况下。从Access处理工作簿时。我发布这个只是为了将来参考。
AppActivate
需要将要激活的应用程序的标题。
如果你在运行时不知道确切的标题,那么写以下内容:
AppActivate Application.Caption
如果使用其他应用程序(如Access(,请在开始时将对象设置为Excel,并用该对象替换Application
。
我知道这是一个老问题,但如果有人遇到这个。。。
我还使用异步http请求(TimHall制作的模块包装器(。
回调正在包装Application.Run方法;我遇到的问题是,由于我访问的REST API的限制,我不得不对客户端的请求进行评级限制。
我用Application做的。等等当应用程序正在等待并尝试执行应用程序时,响应正在触发http响应事件。运行
因此,只需将Application.Wait替换为另一个允许事件的"等待"就可以解决问题。
等待的替代方案
Public Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
Sub Halt(Finish As Long)
'Finish in seconds
Dim NowTick As Long
Dim EndTick As Long
EndTick = GetTickCount + (Finish * 1000)
Do
NowTick = GetTickCount
DoEvents
Loop Until NowTick >= EndTick
End Sub