2016-08-03 4 views
0

Ich habe Probleme, den richtigen Tag-Namen in Chrome zu finden. Wenn ich den folgenden Code ausführe, ist alles, was zurückgegeben wird, "[Objekt]". Hat jemand irgendwelche Vorschläge, um das richtige Feld zu ziehen?VBA gibt [Objekt] zurück, wenn Doc.getElementsByTagName verwendet wird. Der korrekte TagName kann nicht im Browser gefunden werden

Hier ist the website Ich versuche Informationen zu ziehen. Insbesondere Census Tract, aber an diesem Punkt, wenn mir jemand zeigen könnte, wie ich irgendwelche Informationen zurückgebe, werde ich den richtigen abholen.

Hier ist mein Code, derzeit läuft die Ausgabe auf eine MsgBox, nur um das richtige Feld zu finden. Von dort werde ich wieder auf for Anweisung aktivieren und die URL in der VBA dynamisch machen. Beachten Sie auch, dass ich versucht getElementsByName zu verwenden, aber keine Fortschritte gibt entweder:

Sub censusTract() 
Dim sht As Worksheet 
Dim lastRow As Long 

Set sht = ActiveWorkbook.Sheets("Sheet1") 
lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 

'For i = 2 To lastRow 
Dim IE As New InternetExplorer 
'IE.Visible = True 
IE.navigate "http://geocoding.geo.census.gov/geocoder/geographies/address?street=1308+Lapwing+Rd&city=Edmond&state=OK&zip=73003&benchmark=4&vintage=4" 
Do 
DoEvents 
Loop Until IE.readyState = READYSTATE_COMPLETE 
Dim Doc As HTMLDocument 
Set Doc = IE.document 
Dim sDD As String 
'sDD = Doc.getElementsByTagName("br")(0) 
sDD = Doc.getElementsByName("pl_gov_census_geo_geocoder_domain_AddressResult")(0) 
MsgBox sDD 
'IE.Quit 
'sht.Cells(i, 41).Value = sDD 
'Next i 
End Sub 
+0

Was erwarten Sie anstelle von '[object]'? –

+0

Ich hoffe, das Ergebnis des '
' Elements zu sehen, das "TRACT: ..." anzeigt. Wenn ich Element auf der Webseite überprüfe, kann ich das Feld sehen, das ich will, ich bin nur nicht sicher, wie man darauf zugreift. –

Antwort

0

Sie sind ganz in der Nähe. Alles, was Sie tun müssen, ist die richtigen Daten aus dem Objekt zu ziehen. Sie können eine der folgenden

sDD = Doc.getElementsByName("pl_gov_census_geo_geocoder_domain_AddressResult").item(0).innerText 
sDD = Doc.getElementsByName("pl_gov_census_geo_geocoder_domain_AddressResult").item(0).innerHTML 
sDD = Doc.getElementsByName("pl_gov_census_geo_geocoder_domain_AddressResult").item(0).outerHTML 

jetzt seine gerade richtig, um das Objekt ziehen, das Hinzufügen innertext, innerHTML- oder Outerhtml sollte Ihr Ergebnis ziehen.

Sobald Sie das gezogen haben, möchten Sie vielleicht die Ergebnisse in ein Array aufteilen, so dass Sie tun können, was Sie mit jedem der Elemente benötigen. Der folgende Code sollte Ihnen den Einstieg erleichtern.

Sub censusTract() 
Dim sht As Worksheet 
Dim lastRow As Long, v As Variant, block As Variant, x As Integer 


Set sht = ActiveWorkbook.Sheets("Sheet1") 
lastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row 

'For i = 2 To lastRow 
Dim IE As New InternetExplorer 
'IE.Visible = True 
IE.navigate "http://geocoding.geo.census.gov/geocoder/geographies/address?street=1308+Lapwing+Rd&city=Edmond&state=OK&zip=73003&benchmark=4&vintage=4" 
Do 
DoEvents 
Loop Until IE.readyState = READYSTATE_COMPLETE 
Dim Doc As HTMLDocument 
Set Doc = IE.document 
Dim sDD As String 
'sDD = Doc.getElementsByTagName("br")(0) 
sDD = Doc.getElementsByName("pl_gov_census_geo_geocoder_domain_AddressResult").Item(0).innerText 
block = Split(sDD, vbLf) 
x = 2 'start column 
For Each v In block 
    If v <> "" Then 
    Cells(i, x).Value = v 
    x = x + 1 
    End If 
Next v 
'IE.Quit 
'sht.Cells(i, 41).Value = sDD 
'Next i 
End Sub 

Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

+0

Fortschritt! Vielen Dank. Wenn ich 'MsgBox' das' innerHTML'-Zeichen zurück gebe, gibt es eine Menge Informationen zurück, in dieser Ausgabe ist das einzelne Feld, das ich brauche. Wie soll ich noch weiter bohren, um eine einzelne "
" zu ziehen? –

+0

Ich habe gerade eine einfache Analysetechnik veröffentlicht, die Sie überprüfen können. – excelledsoftware

+0

Sie können die Zeichenfolge auch wie ich unter Verwendung der
als Trennzeichen teilen. Sie können versuchen, nur den inneren Text zu benutzen, wie ich gepostet habe. Dann können Sie überprüfen, ob es leer ist und es dann ignorieren oder was Sie sonst noch damit tun müssen. – excelledsoftware