运行时错误"50290":Excel 在后台运行时出现应用程序定义或对象定义错误



我在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 

最新更新