Condividi:        

[VBA EXCEL] importare sorgente html in una cella

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[VBA EXCEL] importare sorgente html in una cella

Postdi corvo4791 » 03/07/10 07:04

Salve, ragazzi.

Un saluto a tutti.

Stò divertendomi ad imparare un pò le macro in VBA per excel.

Vorrei sapere: E' possibile, avendo un URL, dire alla macro di scaricare in una cella specifica la sorgente html associata a quell' url ?

Non stò a dirvi quanta importanza abbia per me riuscire a fare questa cosa. :)

Mi basta anche solo sapere qual'é l'istruzione relativa, poi me la studio da solo...

Se invece qualcuno volesse anche approfondire di più... ben venga XD

Grazie a tutti.
corvo4791
Utente Junior
 
Post: 72
Iscritto il: 02/07/10 08:22

Sponsor
 

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi Anthony47 » 03/07/10 12:31

Ciao corvo4791 e benvenuto nel forum.
Guarda questo messaggio per suggerimenti su come aprire e chiudere una pagina web da vba:
viewtopic.php?p=475557#p475585

Aperta la pagina in questo modo, puoi inserire il codice html in una cella con qualcosa come
Codice: Seleziona tutto
Range("K1").value = objIE.document.body.innerHTML

Poi procedi con la chiusura dell' applicazione IE, come da link precedente.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi corvo4791 » 03/07/10 22:39

Ciao, Antony.

Ti ringrazio del codice. L'ho inserito e mi si apre explorer.
Il mio problema é che sono proprio ai primordi con VBA e sono al livello IF THEN e altre istruzioni semplici.

Mi risulta complicato interpretare un modo per implementare una macro in quel modo.

Io dovrei:

1) Copiare l' URL che si trova in una cella
2) Incollare l' URL nel browser ( uso Firefox ma IE credo vada bene lo stesso ) nella barra degli indirizzo ( non posso semplicemente simulare un click sulla cella perché non mi funziona con il tipo di sito che devo visitare. Quindi devo per forza copiare e incollare l'url nel browser )
3) prendere la sorgente HTML dell' URL
4) Tornare in EXCEL
5) Incollare il codice nella cella di fianco a quella dove c'é l'URL

Non ho proprio idea di come fare. Non lo posso fare a mano perché lo dovrei fare per migliaia di volte.

Non so proprio da dove cominciare. Mi guardo un altro pò la tua macro (che stò guardando da ore) ma, se potessi darmi qualche altro aiuto, te ne sarei gratissimo.
corvo4791
Utente Junior
 
Post: 72
Iscritto il: 02/07/10 08:22

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi corvo4791 » 04/07/10 00:21

Ciao.

Ho provato per bene e sono riuscito almeno a far partire explorer e a far caricara la pagina.

Il problema é che, sull' istruzione

Range("K1").value = objIE.document.body.innerHTML

Mi dà l'errore seguente:

Run-time error '-2147467259 (80004005)':

Automation error

come se non riconoscesse proprio il comando
corvo4791
Utente Junior
 
Post: 72
Iscritto il: 02/07/10 08:22

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi corvo4791 » 04/07/10 02:40

Ho EXCEL 2002 in inglese e microsoft visual basic 6.3... forse sono versioni troppo vecchie ???
Per questo non mi riconosce quel comando ?
corvo4791
Utente Junior
 
Post: 72
Iscritto il: 02/07/10 08:22

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi Anthony47 » 04/07/10 08:49

Il codice che ho suggerito funziona anche su Excel 2002.
Se mi dici il codice completo che stai usando, "copiato senza omissioni dal vba editor", forse posso dire di piu'.
In ogni caso tocchera' a te costruire l' automazione che hai in mente, io posso solo dare suggerimenti su aspetti specifici ben delimitati.
Rimane sempre il dubbio che quello che hai detto di voler fare sia la cosa piu' semplice/efficace per risolvere quello che non hai detto, cioe' il problema vero da risolvere...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi corvo4791 » 04/07/10 10:43

Anthony47 ha scritto:Il codice che ho suggerito funziona anche su Excel 2002.
Se mi dici il codice completo che stai usando, "copiato senza omissioni dal vba editor", forse posso dire di piu'.
In ogni caso tocchera' a te costruire l' automazione che hai in mente, io posso solo dare suggerimenti su aspetti specifici ben delimitati.
Rimane sempre il dubbio che quello che hai detto di voler fare sia la cosa piu' semplice/efficace per risolvere quello che non hai detto, cioe' il problema vero da risolvere...

Ciao


Ciao e grazie come sempre della tua disponibilità.

In realtà a me non serve che IE sia visibile o cose del genere. Non ci devo fare cose complesse. Devo solo prendere il codice HTML della pagina in formato testo e metterlo in una cella. Ho provato il tuo metodo e un altro ed entrambi vanno bene per una cosa ma non per l'altra.

Questo é il tuo codice che ho semplificato un pò in base alle mie esigenze:

Codice: Seleziona tutto
Sub Naviga()
Dim texto As String
Dim objIE As Object
Dim DestUrl As String

DestUrl = "http://www.google.it"
   
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = False
    objIE.Navigate2 DestUrl

Do
DoEvents
Loop Until objIE.ReadyState = READYSTATE_COMPLETE

Range("A" & 1).Value = objIE.document.body.innerHTML

End Sub


- Va bene perché mi apre internet explorer
- Mi dà però errore sull'ultima riga quando devo copiare il codice nella cella(1,1)

Ho trovato poi quest altro metodo che funziona proprio come serve a me, ma che ha un altro problema:

Codice: Seleziona tutto
Sub GetHTML()
Dim texto As String
Dim objHttp As Object
Set objHttp = CreateObject("MSXML2.ServerXMLHTTP")
Call objHttp.Open("GET", "http://www.google.it", False)
Call objHttp.Send("")
' Call MsgBox(objHttp.ResponseText)
Do
DoEvents
Loop Until objHttp.ReadyState = READYSTATE_COMPLETE
texto = CStr(objHttp.Responsetext)
Range("a" & 1) = texto

bodyfine = InStrRev(Range("a" & 1), "</body>")
Range("d" & 1) = bodyfine
End Sub


Se fai un test vedrai che questo mette per bene il codice HTML nella prima cella. Il problema é che il codice che mi serve é sul sito del mio fornitore che é protetto da password (nei codici sopra ho messo google solo come esempio). Questo secondo codice praticamente mi scarica il sorgente della pagina di verifica password e non la pagina che interessa a me.

Con il tuo codice, invece, le pagine si aprono bene. Basta solo mettere USER e PASS la prima volta. Quindi mi interesserebbe sviluppare più la tua soluzione, anche se la seconda sarebbe proprio perfetta perché non mi apre nemmeno il browser per prendere il codice ed é comodissimo.

Mi sento a un passo dalla soluzione ma non ci arrivo per troppa ignoranza. Stanotte ho fatto le 5 a cercare sui vari forum. Se mi aiuti a risolvere ti faccio un monumento :)
corvo4791
Utente Junior
 
Post: 72
Iscritto il: 02/07/10 08:22

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi Anthony47 » 04/07/10 18:11

Se mi dici il codice completo che stai usando, "copiato senza omissioni dal vba editor", forse posso dire di piu'.
Il codice che hai riportato non e' quello in uso, perche', come e' evidente, rimane in loop indefinitamente (a meno che non mi abbia omesso delle linee, e la stessa cosa succede anche alla macro GetHTML).

Non capisco perche' hai provato a fare "miglioramenti" prima di aver fatto funzionare la macro come ti ho detto.
Devi solo mettere, come sempio
Codice: Seleziona tutto
Range("K1").value = objIE.document.body.innerHTML
prima di End Sub nel codice della Sub Naviga
Poi richiami la macro con questa, scritta nello stesso Modulo:
Codice: Seleziona tutto
Sub Esempio()
    Call Naviga("http://www.google.it")
End Sub

Se non vuoi vedere IE aperto, allora va bene objIE.Visible = False, ma questo ti complica il debug, perche' lavori alla cieca e tra l' altro non sai se lasci sessioni aperte.

Stanotte ho fatto le 5 a cercare sui vari forum.
Cercare negli altri forum? :D

Se mi aiuti a risolvere ti faccio un monumento
A parte che non ci tengo (per ora) al monumento, piu' che dirti di copiare del codice e lanciarlo non posso fare; l' unica cosa in piu' e' farlo io per te, ma e' contrario alle mie convinzioni...

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi corvo4791 » 04/07/10 18:39

Ciao, Antony.

La macro l'ho testata prima di modificarla.

Ho preso la macro pari pari e copiata in un modulo. Ecco cosa ho:

Codice: Seleziona tutto
Public objIE As Object
Sub Naviga(DestUrl)

'Dim DestUrl As String  'per macro "stand alone"
On Error GoTo OpenIE
    If objIE.Visible = False Then objIE.Visible = True
    objIE.Navigate DestUrl
    Do While objIE.busy: DoEvents: Loop 'opzionale, loop se non completato
Exit Sub

OpenIE: 'crealo se manca
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    objIE.Navigate DestUrl
    Do While objIE.busy: DoEvents: Loop    'opzionale, loop se non completato
    Range("K1").Value = objIE.document.body.innerHTML
End Sub
   
    Sub Esempio()
        Call Naviga("http://www.google.it")
    End Sub

Sub closeIE()
    On Error Resume Next
    objIE.Quit
    Set objIE = Nothing
End Sub


Se lancio la macro Esempio mi apre explorer senza problemi (anzi me ne apre 2... poi vediamo perchè) e mi va alla pagina indicata.

Se lancio closeIE mi chiude una delle due finestre che si sono aperte e quindi funziona.

Ovunque metta il comando
Range("K1").value = objIE.document.body.innerHTML

Non va !!!
se lo metto prima di END SUB in NAVIGA.

L'errore é:

Metodo 'Document' dell'oggetto 'IWebBrowser' non riuscito

So che é contrario ai tuoi principi :) ma potresti buttare un occhio nel file ? mi risparmieresti un sacco di grattacapi...

lo scarichi qui
corvo4791
Utente Junior
 
Post: 72
Iscritto il: 02/07/10 08:22

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi Anthony47 » 05/07/10 01:23

Malauguratamente il file che alleghi a me non da' errore e funziona; comunque ti ho dato una indicazione sbagliata: l' istruzione Range("K1").Value = objIE.document.body.innerHTML e' necessario metterla nella macro "chiamante", dopo la Call e prima di End Sub (e non all' interno della Sub Naviga(DestUrl)) perche' altrimenti in qualche caso tale istruzione potrebbe non essere eseguita (ma nemmeno andare in errore). Cioe':
Codice: Seleziona tutto
    Sub Esempio()
        Call Naviga("http://www.google.it")
    Range("K1").Value = objIE.document.body.innerHTML
    End Sub

Testato su Pc con Xp, Excel 2003 SP3, VB 6.3, in Italiano.

Se, con il tuo file postato e la Sub Esempio di sopra hai ancora un errore, allora:
-prova a mettere Application.Wait (Now + TimeValue("0:00:01")) subito DOPO objIE.Navigate DestUrl (in ambedue le posizioni della macro Naviga).
Se ancora malfunziona:
-confermami che la pagina IE visualizza l' home page di google
-dimmi quali sono i "Riferimenti" abilitati nel vba editor (dovrebbe essere una voce in Menu /Tools), meglio se pubblichi uno screenshot mentre visualizzi questa informazione (vedi qui: viewtopic.php?f=26&t=80395#p466013)
-dammi il codice di errore e il messaggio esatto (anche qui basterebbe lo screenshot)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [VBA EXCEL] importare sorgente html in una cella

Postdi corvo4791 » 05/07/10 11:27

Anthony47 ha scritto:Malauguratamente il file che alleghi a me non da' errore e funziona; comunque ti ho dato una indicazione sbagliata: l' istruzione Range("K1").Value = objIE.document.body.innerHTML e' necessario metterla nella macro "chiamante", dopo la Call e prima di End Sub (e non all' interno della Sub Naviga(DestUrl)) perche' altrimenti in qualche caso tale istruzione potrebbe non essere eseguita (ma nemmeno andare in errore). Cioe':
Codice: Seleziona tutto
    Sub Esempio()
        Call Naviga("http://www.google.it")
    Range("K1").Value = objIE.document.body.innerHTML
    End Sub

Testato su Pc con Xp, Excel 2003 SP3, VB 6.3, in Italiano.

Se, con il tuo file postato e la Sub Esempio di sopra hai ancora un errore, allora:
-prova a mettere Application.Wait (Now + TimeValue("0:00:01")) subito DOPO objIE.Navigate DestUrl (in ambedue le posizioni della macro Naviga).
Se ancora malfunziona:
-confermami che la pagina IE visualizza l' home page di google
-dimmi quali sono i "Riferimenti" abilitati nel vba editor (dovrebbe essere una voce in Menu /Tools), meglio se pubblichi uno screenshot mentre visualizzi questa informazione (vedi qui: viewtopic.php?f=26&t=80395#p466013)
-dammi il codice di errore e il messaggio esatto (anche qui basterebbe lo screenshot)

Ciao


Guarda io la statua te la devo fare....
Ho provato sul mio NETBOOK con XP, Excel 2002 e IE8 e funziona benissimo.

Praticamente ciò che non andava era quel cavolo di IE7 che ho sul PC sul quale lavoro.

Ho installato IE8 e adesso funziona alla grande.

E' anche meglio di come doveva essere dato che mi scarica solo il codice che mi serve senza BODY HEAD e altre intestazioni inutili.

Grazie di cuore Antony. Sei un grande.

E' troppo bello che ci sia gente disinteressata disposta ad aiutarti e a perdere il tempo appresso a te :)

GRANDE !!!!
corvo4791
Utente Junior
 
Post: 72
Iscritto il: 02/07/10 08:22


Torna a Applicazioni Office Windows


Topic correlati a "[VBA EXCEL] importare sorgente html in una cella":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti