Excel VBA打开第一个返回的google页面 – 奇怪的行为

我正在使用excel VBA打开google结果的第一个返回页面。 从第一页开始,我正在根据元素ID操作数据。 在做这个过程中,我遇到了一个很奇怪的行为。

让我简要介绍一下我们正在做的事情。

我将在用户表单中input名字和姓氏。 对于给定的名字和姓氏,我将searchlinkedinconfiguration文件。

例如,如果名字是Sachin,姓氏是Tendulkar,我将使用VBA将search词作为Sachin Tendulkar linkedin传递给Google。 对于返回的search结果,我将打开第一个search结果页面,并尝试获取LinkedInconfiguration文件数据。

我的代码到目前为止如下。

Private Sub CommandButton1_Click() Dim ie As InternetExplorer Dim RegEx As RegExp, RegMatch As MatchCollection Dim MyStr As String Dim pDisp As Object Dim FirstName As String Dim LastName As String Dim sample As String Set ie = New InternetExplorer Set RegEx = New RegExp Dim iedoc As Object Dim openedpage As String Dim inpagestrt, inpageend As Integer Dim returnstatement As String Dim detailname, locationdetails, profileexperience, profilecontact Dim overview,skillslist, profilelanguages, profileeducation, publicgroups detailname = "" returnstatement = "" locationdetails = "" profileexperience = "" profilecontact = "" overview = "" skillslist = "" profilelanguages = "" profileeducation = "" publicgroups = "" FirstName = TextBox1.Value LastName = TextBox2.Value ie.Navigate "http://www.google.com/search?hl=en&q=" & FirstName & "+" & LastName & "+linkedin&meta=" Do Until ie.ReadyState = READYSTATE_COMPLETE Loop MyStr = ie.Document.body.innerText Set RegMatch = RegEx.Execute(MyStr) 'If a match to our RegExp searchstring is found then launch this page If RegMatch.Count > 0 Then ie.Navigate RegMatch(0) Do Until ie.ReadyState = READYSTATE_COMPLETE Loop '**************************************** 'EDITS '**************************************** Set iedoc = ie.Document Dim extractedHTML As String Dim iStart, iEnd As Integer extractedHTML = iedoc.getElementById("search").innerHTML iStart = InStr(1, extractedHTML, "href=", vbTextCompare) + Len("href=") + 1 iEnd = InStr(iStart, extractedHTML, Chr(34), vbTextCompare) 'extract the text extractedHTML = Mid(extractedHTML, iStart, iEnd - iStart) 'go to the URL ie.Navigate extractedHTML Set iedoc1 = ie.Document 'MsgBox iedoc1 On Error GoTo ErrHandler: openedpage = iedoc1.getElementById("name").innerText detailname = "NAME:" & vbCrLf & FirstName + " " + LastName MsgBox "" openedpage = "" openedpage = iedoc1.getElementById("headline").innerText 'On Error GoTo ErrHandler: MsgBox "LOCATION DETAILS:" & vbCrLf & openedpage locationdetails = openedpage + vbCrLf MsgBox locationdetails openedpage = iedoc1.getElementById("profile-experience").innerText profileexperience = openedpage + vbCrLf openedpage = iedoc1.getElementById("profile-contact").innerText profilecontact = openedpage + vbCrLf openedpage = iedoc1.getElementById("overview").innerText overview = openedpage + vbCrLf openedpage = iedoc1.getElementById("skills-list").innerText skillslist = openedpage + vbCrLf openedpage = iedoc1.getElementById("profile-languages").innerText profilelanguages = openedpage + vbCrLf openedpage = iedoc1.getElementById("profile-education").innerText profileeducation = openedpage + vbCrLf openedpage = iedoc1.getElementById("pubgroups").innerText publicgroups = openedpage + vbCrLf returnstatement = locationdetails + profileexperience + profilecontact + overview + skillslist + profilelanguages + profileeducation + publicgroups MsgBox returnstatement ErrHandler: openedpage = "NULL" Resume Next '**************************************** 'End EDITS '**************************************** Else MsgBox "No linkedin profile found" End If Set RegEx = Nothing Set ie = Nothing End Sub 

最奇怪的是当我注释行号59,我的位置的细节返回NULL。 但是,如果我有该消息框的位置的细节得到正确返回。 我尝试使用一个variables而不是消息框,但除了当我使用消息框时,位置详细信息变为NULL。

 openedpage = iedoc1.getElementById("name").innerText detailname = "NAME:" & vbCrLf & FirstName + " " + LastName **MsgBox ""** (If i comment it out, location details becomes NULL. If it is uncommented, location details value is correct. openedpage = "" openedpage = iedoc1.getElementById("headline").innerText 'On Error GoTo ErrHandler: **MsgBox "LOCATION DETAILS:" & vbCrLf & openedpage** locationdetails = openedpage + vbCrLf MsgBox locationdetails 

我说,你macros需要一些额外的时间来加载所有(或一些额外的)数据。 如果你有MsgBox的地方,你无意中给你的过程一些时间,然后find并closures你MsgBox。

如果你把其他types的“等待”点(比如Application.WaitDo...Loop )而不是MsgBox。 请让我们知道结果。

Internet Explorer需要一些时间来加载和呈现页面。 添加一行

 Do While ie.Busy : WScript.Sleep 100 : Loop 

在指令之后ie.Navigate extractedHTML 。 加载第一页时,您已经做了类似的事情:

 ie.Navigate "http://www.google.com/search?hl=en&q=" & FirstName _ & "+" & LastName & "+linkedin&meta=" Do Until ie.ReadyState = READYSTATE_COMPLETE Loop 

尽pipe你也应该在那里添加睡眠指令。