运行时错误'50290':应用程序定义的错误或对象定义的错误Excel

时间:2015-07-23 20:49:35

标签: excel vba excel-vba

我在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,但理想情况下,我不介意当用户在stackoverflow.com上同时变得更智能时,宏是否在后台运行: - )

有人对如何克服这个问题有什么建议吗? 谢谢!

5 个答案:

答案 0 :(得分:2)

您可以尝试捕获错误并继续执行代码,这可能有所帮助。

Sub Test()

...declarations...

On Error Goto Error_

...your code...

Exit Sub

Error_:
 If (Err.Number = 50290) Then Resume
Stop
Resume
End Sub

答案 1 :(得分:1)

AppActivate "Microsoft Excel"

当你知道自己有焦点并在

之后激活它时存储你的WB

答案 2 :(得分:0)

在运行宏时,尝试将这两个标志设置为false:

Application.ScreenUpdating = False
Application.DisplayAlerts = False

答案 3 :(得分:0)

在另一种情况下,我也遇到了此错误。从Access处理工作簿时。我将其发布以供将来参考。

AppActivate需要将激活的应用程序的标题。

如果您在运行时不知道确切的标题,请编写以下内容:

AppActivate Application.Caption

如果您使用Access之类的其他应用程序,请在开始时将对象设置为Excel,然后用该对象替换Application

答案 4 :(得分:0)

我知道这是一个老问题,但是如果有人遇到这个问题...

我还使用异步http请求(蒂姆·霍尔(Tim Hall)制造的模块包装器)。

回调包装了Application.Run方法;我遇到的问题是,由于我访问的REST API的限制,我不得不在客户端对请求的速率进行限制。

我是通过Application.Wait完成的 当应用程序正在等待并尝试执行Application.Run

时,响应将触发http响应事件。

因此,只需用另一个允许事件解决问题的“等待”替换Application.Wait。

.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