2016-11-17 56 views
0

我正在使用一个宏来自动化一些web浏览器的东西,并且有一个间歇性的运行时错误91“对象变量或块变量未设置”。我一直在玩弄我如何声明和创建我的浏览器对象,但没有任何工作。我的excel宏生成的错误不一致

Sub Morning_Script() 
Dim WebBrowser As Object 
Set WebBrowser = New InternetExplorerMedium 
WebBrowser.Visible = True 
WebBrowser.navigate "www.google.com" 

While WebBrowser.Busy = True 
    DoEvents 
Wend 

WebBrowser.document.getElementById("lst-ib").Value = "test" 
'WebBrowser.document.getElementById("verify").Value = Worksheets("Sheet1").Range("B2") 
'WebBrowser.document.getElementById("institution").Value = "xxx" 
'Worksheets("Sheet1").Range("B1").Clear 
'Worksheets("Sheet1").Range("B2").Clear 
End Sub 

URL已更改为公共网站,表单条目已被注释掉。

+1

您可能需要在尝试访问表单元素之前添加一个等待。 –

+0

等什么?我已经等待浏览器加载。 –

+1

很多当前的网页内容都是动态的,一旦页面加载就被加载/创建(其中“加载”意味着所有源代码都已经交付,但不一定意味着页面已完成)。许多页面通过脚本获取附加内容以构建页面。你只是在测试“繁忙”,这对于许多页面来说只是进入交互式状态的一部分。 –

回答

0

如果你希望避免固定定时器,试试这个:

Dim objElement As Object: Set objElement = Nothing 
While objElement Is Nothing 
    Set objElement = WebBrowser.document.getElementById("lst-ib") 
    DoEvents 
Wend 
objElement.Value = "test" 

如果你想参考验证和机构,就必须实现这个方案对他们来说,也是一样,等到所有三个变量都是非空的。如果需要下载大量页面,您可能还需要设置超时或最大重试次数。