그래서 나는 약간의 걸림돌을 만났고 여기 누군가가 나를 도울 수 있기를 바랍니다. 즉, 웹 페이지 문자열을 방문해야합니다 (각 페이지의 이름 목록은 이미 입력되어 있으며 코드는 잘 작동합니다). 코드가 각 페이지를 방문 할 때마다 정보를 다시 가져와야합니다. 불행히도 문제가 있습니다. "자동화 오류 지정되지 않은 오류"가 나타나기 전에 "A"목록을 통해서도이를 수행 할 수 없으며 같은 위치에 있지 않습니다.VBA - Excel - 자동화 오류 알 수없는 오류
이 문제를 해결하기 위해 "정상적인"단계를 시도했습니다. VB 6 컨트롤을 설치했고 mscomctl.ocx의 등록을 해제하고 다시 등록했으며 On Error Resume Next (아무 것도하지 않음)를 포함하여 다시 등록했습니다.
일반적으로 죽기 전에 100 건이 넘습니다 (앞에서 말한대로 임의로). 그리고 오류가 발생한 후 다시 실행하려고 할 때 (변경 사항의 유무에 관계없이) 첫 번째 오류가 발생합니다. 내 컴퓨터를 다시 시작하면 다시 시도 할 수 있지만 이유는 무엇이든 끝내지 못합니다.
코드가 너무 복잡하고이를 줄여야합니까? 나는 한 번에 각 문자에 대해서만 실행되도록하는 방법을 찾을 수 있습니다. (A를 모두 실행 한 다음 B를 실행합니다.) 그러나 여전히 문자 A를 완성 할 수는 없습니다.
눈치 채 셨습니다. 다른 누군가가 xmlhttp로 바꾸기 위해 IE를 사용하지 말 것을 제안했다. 이 스크립트가 너무 길다는 문제가 있습니까? 여기 정확히 내가 뭘 잘못하고 있니? 내가 알
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 개체를 지속적으로 생성한다는 것입니다.이 개체를 파괴하거나 '아무것도'설정하지 않는 것입니다. 초기에 하나의 IE 객체를 생성하고 루프 내에서 동일한 객체를 탐색하는 데 도움이 될 수 있습니다. 무의미하고 값 비싸며 아마도 IE의 100 개 이상의 인스턴스를 만드는 데 오류가 발생할 수 있습니다. –
'Dim IE as Object'와'IE가 아무 것도 없다면 Set IE = CreateObject (...' –
정말 고마워요! 실제로는 IE 브라우저의 숫자였습니다. t는 "존재"에서 말하려합니다. 분명히 내 브라우저가 손상되어 다시 시작되지 않을 것입니다 (따라서 다시 시작됩니다)! – user3814832