Estrapolare valori dal web
Hai un problema con Excel? 
Estrapolare valori dal web
di Textomb data: 12/04/2015 20:41:24
Salve ragazzi,
mi sono imbattutto in una problematica per me nuova ed inesplorata.
dovrei prendere, tramite VBA, il valore riferito al numero delle famiglie censite in quel Comune e presente nella sezione statistiche di quel sito web che ho inserito nella variabile sWeb e riportarla nella mia brava tabella Excel..
Sono riuscito a scrivere la porzione di codice qui sotto. Ma non riesco ad andare avanti.
Ho capito che mi interessa la classe "Principali valori" del codice HTML ma ora come proseguo..? Come faccio ad estrapolare il n. 1.820 che è quello che mi serve
confido nel Vostro aiuto...
Sub EstraiDati()
Dim ie As Object, Ele As Object
Dim ie_Element As Object
Dim nLoops As Long
Const sWeb As String = "accatitipi : / / www.comuni-italiani.it/061/004/statistiche/"
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Silent = True
.navigate sWeb
.Visible = False
Do While .busy Or .ReadyState <> 4
DoEvents
Loop
For Each Ele In ie.document.all
If Ele.classname = "itit" Then Debug.Print Ele.innertext
Next
End With
End Sub
|
di azzeccagarbugli (utente non iscritto) data: 13/04/2015 12:42:47
Cit. Salve ragazzi ...
Grazie per "ragazzo" ; sai, alla mia età ...
Venendo alla tua richiesta, potresti provare questo Codice.
Considera che il Codice, strutturato come ora, cancella tutti i Dati presenti nel foglio nel quale viene lanciato; quindi, se nel foglio di lavoro ci sono Dati che non devono essere cancellati, dovrai utilizzare un foglio d'appoggio.
Poi, se il Codice necessita di qualche "aggiustamento", possiamo vedere assieme.
Solo una precisazione, la Variabile "Auto" dovrà contenere l'indirizzo completo; questo non sono riuscito a farlo (mi viene segnalata sempre l'impossibilità di inserire l'indirizzo completo), ma questo, molto probabilmente è dovuto ad una mia scarsa conoscenza delle regole.
Option Explicit
Sub WEB()
Dim Pop As Long
Dim Auto As String, Comune As String
Cells.Clear
Range("A1").Select
Application.ScreenUpdating = False
Auto = "URL;//www.comuni-italiani.it/061/004/statistiche/recenti.html"
With ActiveSheet.QueryTables.Add(Connection:=Auto, Destination:=Range("$A$2"))
.WebSelectionType = xlEntirePage
.Refresh BackgroundQuery:=False
End With
Pop = Cells(18, 5)
Cells.Clear
[A1] = "Popolazione del Comune di Arienzo: "
[B1] = Pop
[B1].NumberFormat = "#,##0 ""Abitanti"""
Cells.Columns.AutoFit
Application.ScreenUpdating = True
End Sub
|
di Textomb data: 13/04/2015 17:58:39
ciao azzeccagarbugli... (che nome che ti sei scelto)
ti ringrazio molto per la dritta.
In effetti non era ciò che cercavo ma, indirettamente mi hai portato sulla buona strada.
Alla fine ho scelto una via intermedia, probabilmente più articolata, ma ugualmente efficace.
lo considero risolto.
alla prossima.
di Textomb data: 13/04/2015 18:02:45
dimenticavo la spunta del risolto...
di azzeccagarbugli (utente non iscritto) data: 13/04/2015 18:28:22
Cit. ciao azzeccagarbugli... (che nome che ti sei scelto)
Il Nome non l'ho scelto io; l'ha scelto "Alessandro ... Manzoni (Fermo e Lucia, poi, Promessi sposi)".
Credo sarebbe interessante conoscere la tua soluzione; potrebbe interessare qualche altro Utente.
di Textomb data: 13/04/2015 19:07:44
Come dicevo la routine è venuta un pò diversa nella logica e nella struttura.
Sono certo che potrà farsi in modo molto più efficace e più semplice. Ma a me è venuta così.
sostanzialmente cerco per i primi nove comuni della lista, rispetto al dato che mi serve, la sua posizione nella pagina web (offsettop e offsetleft) e, non appena la trovo la sparo nel mio foglio nel range A1 e seguenti...
Sub EstrapolaValori()
Dim ie As Object, Ele As Object
Dim ie_Element As Object
Dim sWeb As String
Dim w As Byte
Set ie = CreateObject("InternetExplorer.Application")
For w = 1 To 9
sWeb = "h t t p : //www.comuni-italiani.it/061/00" & w & "/statistiche/recenti.html"
With ie
.Silent = True
.navigate sWeb
.Visible = False
Do While .busy Or .ReadyState <> 4
DoEvents
Loop
End With
For Each Ele In ie.document.all
If Ele.offsettop < 320 And Ele.offsettop > 315 And Ele.offsetleft < 385 And Ele.offsetleft > 375 Then
Range("a" & w).Value = CInt(Replace((Ele.innertext), ".", ""))
Range("a" & w).NumberFormat = "#,#"
End If
Next
Next
End Sub
|
Vuoi Approfondire?