Excel VBA IE自动化 – 粘贴链接到电子表格

我有VBA代码连接到IE浏览器,bbc.co.uk和search任何文本在单元格A1。

我希望将第一个search结果粘贴到电子表格的单元格A2中。

我想复制/粘贴的邮件是“简短的”。

我的代码如下 – 除了最后的部分外,

Sub FillInBBCSearchForm() Dim ieApp As New SHDocVw.InternetExplorer Dim words As Range Set words = Range("A1") ieApp.Visible = True 'go to the website of interest ieApp.Navigate "http://www.bbc.co.uk/" Do While ieApp.Busy DoEvents Loop 'wait for page to finish loading Do While ieApp.Busy And Not ieApp.ReadyState = READYSTATE_COMPLETE DoEvents Loop '****fill in the search form ieApp.Document.getElementById("orb-search-q").Value = words Application.ScreenUpdating = True 'wait for page to finish loading Do While ieApp.Busy And Not ieApp.ReadyState = READYSTATE_COMPLETE DoEvents Loop '****click the search button ieApp.Document.all("orb-search-button").Click 'wait for page to finish loading Do While ieApp.Busy And Not ieApp.ReadyState = READYSTATE_COMPLETE DoEvents Loop 'Select the first article heading and paste it to cell A2 For Each elm In ie.Document.getElementsByClassName("summary short") If InStr(elm.innerText, "@") Then Range("A2").Value = innerText End If Next elm 'Set out1 = ieApp.Document.getElementsByClassName("summary short")(0).innertext End Sub 

我注意到了一些事情。

首先,你已经声明ieApp作为你的InternetExplorer对象,但是你试图用ie来代替。 此外,在Range("A2").Value = innerText你没有说,你实际上想要哪个对象的innetText 。 该行应该是Range("A2").Value = elm.innerText

所以这:

 For Each elm In ie.Document.getElementsByClassName("summary short") If InStr(elm.innerText, "@") Then Range("A2").Value = innerText End If Next elm 

应该是这样的:

 For Each elm In ieApp.Document.getElementsByClassName("summary short") If InStr(elm.innerText, "@") Then Range("A2").Value = elm.innerText End If Next elm 

为了避免这样的错误,我在任何子程序之外添加了Option Explicit 。 这强制显式variables声明,除了是一个好的做法之外,在代码执行之前会捕获这些错误,并且可以节省数小时的debugging时间,以便发现错误input了variables名称。 这也可以帮助你找出当你回到过去一段时间没有访问过的旧代码时你正在尝试做什么。

如果你添加Option Explicit它会强制你声明elm的东西。 您可以在代码的开头添加Dim elm As Object来解决此问题(因为getElementsByClassName方法返回对象集合)。