因此,我遇到了一個輕微的絆腳石,希望在這裏有人可以幫助我。總之,我需要訪問一串網頁(每個網頁上的名稱列表已經輸入,該代碼工作正常)。當我的代碼訪問每個頁面時,我需要撤回信息。不幸的是,有一個問題 - 在我得到「自動化錯誤未指定的錯誤」之前,它甚至無法通過「A」列表並且它永遠不會在同一個位置。VBA - Excel - 自動化錯誤未指定錯誤
我試過了「正常」的步驟來解決這個問題。我已經安裝了VB 6控件,並且我已經註銷並重新註冊了mscomctl.ocx,並且包括On Error Resume Next(它什麼都不做)。
它死前通常會達到100個以上的案例(如前所述,這是隨機的)。彈出錯誤後,當我嘗試重新運行它(有或沒有更改),並在第一個錯誤。如果我重新啓動計算機,它會讓我再次嘗試(無論出於何種原因),但仍然無法完成。
代碼是否太複雜,我需要減少它?我可能會找到一種方法來讓它每次只能運行每個字母(運行所有A,然後執行B's等),但我仍然無法完成字母A。
我注意到另一個線程有人建議,而不是使用IE切換到xmlhttp - 這是一個修復?這個腳本太長了嗎?我在這裏做錯了什麼?
Sub Lookup()
Range("AI1").Value = "Unique ID"
Range("AJ1").Value = "Name"
Range("AK1").Value = "Birth Year"
Range("AL1").Value = "Title"
Range("AM1").Value = "State"
Range("AN1").Value = "Position"
Range("AO1").Value = "Country"
Range("AP1").Value = "Appointed"
Range("AQ1").Value = "Credentials"
Range("AR1").Value = "Terminations"
Dim i As Integer
For i = 1 To 26
If i = 24 Then
Range("X:X").End(xlUp).Select
ActiveCell.Value = ""
Else
Dim ic As String
ic = LCase(ConvertToLetter(i))
Range(ic & "5000").End(xlUp).Select
Dim J As Integer
J = ActiveCell.Row
Dim k As Integer
For k = 2 To J
Range(ic & k).Select
Dim Lookup As String
Lookup = ActiveCell.Value
Dim IE As Variant
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
IE.navigate "http://history.state.gov/departmenthistory/people/" & Lookup
Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE
Dim Doc As HTMLDocument
Set Doc = IE.document
Dim Italics As Integer
Italics = 0
Dim EachA As Integer
For EachA = 64 To 100
Dim Position As String
Position = Doc.getElementsByTagName("a")(EachA).innerText
If Position = "Home" Then
Exit For
Else
Dim NameBY As String
NameBY = Doc.getElementsByTagName("h2")(1).innerText
Dim TitleST As String
TitleST = Doc.getElementsByTagName("p")(1).innerText
Range("AJ" & "90000").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = NameBY
TitleState = Split(TitleST, vbLf)
ActiveCell.Offset(0, 2).Value = TitleState(0)
On Error GoTo 1037
ActiveCell.Offset(0, 3).Value = TitleState(1)
On Error GoTo 1037
1037
ActiveCell.Offset(0, 4).Select
ActiveCell.Value = Position
Dim EachLi As Integer
EachLi = EachA - 1
If Doc.getElementsByTagName("li").Item(EachLi + Italics).innerHTML Like "<em>*" Then
Italics = Italics + 1
Else
End If
Dim JobList As String
JobList = Doc.getElementsByTagName("li")(EachLi + Italics).innerText
Dim Job() As String
Job() = Split(JobList, vbLf)
Dim JCount As Integer
For JCount = LBound(Job) To UBound(Job)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Job(JCount)
Next JCount
End If
Next EachA
Next k
End If
Next i
End Sub
XMLHTTP請求可能會更可靠,應該會更快。不知道它是否能解決這個問題。如果問題發生在各個地方,很難指出問題。我注意到的一件事是你不斷地在循環中創建新的IE對象,並且你永遠不會銷燬它們或者設置爲Nothing。可能只是簡單地幫助創建一個IE對象,並使用同一個對象在循環內導航。這是毫無意義的,代價昂貴的,並且可能是創建100多個IE實例的錯誤來源。 –
'Dim IE as Object' and'If IE Is Nothing Then Then Set IE = CreateObject(...' –
非常感謝你!!!它實際上只是IE瀏覽器的數量 - 我認爲通過關閉Visible他們不是'可以這麼說,顯然我的瀏覽器崩潰了,它不會重新啓動,因爲它(因此重新啓動刷新它)! – user3814832