Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Query Web con link

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

Re: [Excel] Query Web con link

Postdi mpsinf » 16/12/12 22:43

Proseguo nel frattempo con una richiesta a cui non ho trovato risposta nei vari post.

Dovrei a seguito di un evento poter cliccare una determinata cella contenente un link di una queryweb.
Non sempre però importando la query web e anche mantenendo la formattazione html completa come opzione selezionabile avviene la visualizzazione del link. Faccio esempio come riferimento al sito www.prezzipazzi.com
Come si può procedere allo sviluppo della macro in questi due casi ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Sponsor
 

Re: [Excel] Query Web con link

Postdi Anthony47 » 17/12/12 01:03

Non e' chiaro a cosa fai riferimento; nell' ipotesi che alluda al fatto che alcuni link in realta' non puntano a nulla (meglio: puntano allo stesso ducumento excel) allora questi sono i tanti link sul sito che come anchor puntano a <A href="#", che nel linguaggio html sono riferimenti indefiniti; in questi casi in genere l' oggetto ha anche associato un "onclick" e sara' lo script associato al click che determina l' azione da svolgersi.
Se invece alludi ad altro allora aiutami a replicare questo "altro"

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 17/12/12 13:36

Se provo ad importare come queryweb la pagina www.bidfun.it mi importa in determinate celle dei link cliccabili (es. "fai un offerta") che eseguono determinate azioni. Se faccio la stessa cosa con il sito www.prezzipazzi.com la cella "punta" non viene importata in nessuna cella. Come posso risolvere il problema?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 17/12/12 22:58

Quegli oggetti sono privi di hyperlink (infatti nel browser il puntatore non cambia aspetto quando ci passi sopra), ma hanno associat un evento "onclick" che manda in esecuzione la funzione punta(asta)

Potresti usare una macro di SelectionChange, e se il target e' "post bottom" esegui un hyperlink a un indirizzo che prelevi dalle celle soprastanti (o dall' hyperlink presente nelle celle soprastanti); ma se guardi (nel sorgete) cosa fa punta(asta) vedrai che fa parecchie cose che la macro sara' impedita a eseguire, quindi la vera alternativa e' eseguire in una sessione IE controllata dalla macro il "click" di quel bottone.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 18/12/12 06:53

Anthony47 ha scritto: quindi la vera alternativa e' eseguire in una sessione IE controllata dalla macro il "click" di quel bottone.


Potresti gentilmente farmi un breve esempio visto il livello complesso della situazione :idea:
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 18/12/12 14:45

Veramente questo e' un caso abbastanza semplice, se si analizza il sorgente: stabilito il legame tra l' oggetto IE e una sessione InternetExplorer che punta all' url in questione e raggiunto ReadyState = 4, sara' sufficiente qualcosa come
Codice: Seleziona tutto
Gara = 94703   '<< La tua "gara"
Set myButt = IE.Document.getElementById("bottone2" & Gara)
myButt.Click

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 18/12/12 21:02

Ok risolto e sperimentato anche questo tuo GRANDE consiglio... alle volte le cose semplici sembrano le più complicate.

A proposito di ottimizzazione dei tempi dovendo analizzare alcune pagine web contemporaneamente, utilizzando il codice

Codice: Seleziona tutto
Set IE = CreateObject("InternetExplorer.Application")
 
    With IE
        .Navigate Range("B1").Value
        .Visible = False
        Do While .Busy: DoEvents: Loop    'Attesa not busy
        Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
    End With
 
myStart = Timer 'Aspetto 2 secondi perche' non mi fido di ReadyState=4
 Do
  DoEvents
  If Timer > myStart + 2 Or Timer < myStart Then Exit Do
 Loop
 

mi ritrovo che devo attendere diversi secondi perchè la pagina sia disponibile per l'analisi... e se devo "saltare" da una pagina web all'altra perdo troppo tempo.
Se mi creo un With IE1 e With IE2 e così via, secondo te posso poi cancellare il .readyState, o che strada mi consigli per analizzare più pagine velocemente considerando comunque che devo fare un refresh della pagina per acquisire i dati aggiornati ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 18/12/12 23:07

Se ti serve piu' tempo per tutte le elaborazioni allora devi ridurre tempi morti; il "readystate=4" e' il minimo che devi controllare, quei 2 secondi in piu' sono una sicurezza che potresti provare a ridurre a 1 secondo. Oppure fai uno "stress test" per verificare se il solo "readystate=4" garantisca la stabilita' del documento: ad esempio navighi tra una serie di url significativi del sito, raccogli il .body.innertext subito dopo readystate=4 e poi dopo 1 secondo e li confronti; ripeti i test 1000/5000 volte e se non hai mai errori potresti concludere che quell' attesa oltre il readytest=4 sia inutile.

Quando parallelizzi l' attivita' su piu' sessioni IE hai gia' un beneficio, perche' i caricamenti procedono in parallelo, col risultato che quando hai completato l' analisi del primo il secondo sara' probabilmente gia' in readystate=4.
Se lo stress test dimostrasse che l' ulteriore attesa e' necessaria, allora dovresti provare a realizzare un monitor dei soli readystate che inneschino separatamente anche il conteggio degli N myStartN, per evitare che tutto sia accodato al processo piu' lento.
Sono spunti da valutare in funzione di molte cose e da sviluppare, spero possano essere di una qualche utilita'.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 20/12/12 20:56

Anthony47 ha scritto:Come detto nel post precedente dopo circa 2000 cicli l' occupazione di memoria nei miei test e' rimasta costante, dopo aver dichiarato l' oggetto IE una sola volta in modo "Public" (cosa che presuppone la dichiarazione sia messa in testa a un Modulo di codice standard, es Modulo1 o meglio in testa al Modulo che contiene CreateObject("InternetExplorer.Application")


riprendo il discorso perchè nonostante

Codice: Seleziona tutto
Public IE As Object

Sub A0_AVVIA()

  Set IE = CreateObject("InternetExplorer.Application")

pippo:
Call A1_Home
zzz = zzz + 1
' MsgBox zzz
GoTo pippo

End Sub


pur tenendo chiuso IE da Windows la memoria occupata continua ad aumentare (anche se ogni tanto ne libera parzialmente un po')
sai dirmi possibile motivo di questo comportamento ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 21/12/12 03:23

Nella tua macro c' e' anche un IE Quit? se No dovresti trovarti con una quantita' rilevante di processi InternetExplorer.
E c' e' anche una Set IE=Nothing? se No ti troverai piccole quantita' di memoria (10-20 kb) occupate a ogni nuovo Set IE = CreateObject("InternetExplorer.Application")

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 21/12/12 06:43

Anthony47 ha scritto:Nella tua macro c' e' anche un IE Quit? se No dovresti trovarti con una quantita' rilevante di processi InternetExplorer.
E c' e' anche una Set IE=Nothing? se No ti troverai piccole quantita' di memoria (10-20 kb) occupate a ogni nuovo Set IE = CreateObject("InternetExplorer.Application")

Non c'è ne IE Quit ne IE=Nothing... Altrimenti non dovrei ricreare ogni volta Set IE = CreateObject("InternetExplorer.Application") ?
Mi avevi detto tu di creare un solo Set IE ... e renderlo pubblico. Ho non capito cosa volevi dire allora ? :roll:
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 21/12/12 15:29

L' uso di una dichiarazione Public IE as Object e' l' alternativa all' uso di Dim IE as Object a livello di modulo; nel primo caso si alloca un unico spazio per la variabile IE, nel secondo caso si alloca uno spazio ogni volta che si esegue la Dim (il che diventa un problema quando la Dim fa parte di un ciclo che si rilancia in continuazione).
Ora se tu non hai una IE Quit, con quel codice dovresti trovarti con molti processi iexplorer in memoria; cosa facile da controllare con TaskManager.
Anche lavorare con una sessione sempre aperta non e' consigliato:
Anthony ha scritto:Stranamente e' molto peggiore la situazione lavorando con una sola sessione di IE sempre attiva; in questo caso dopo un migliaio di cicli il processo iexplorer.exe era cresciuto fino 1.8 gigabyte, quindi in rotta inesorabile verso la saturazione della memoria...

Quindi la raccomandazione e' di avere oggetti dichiarati in modo condiviso tra i tuoi moduli (es banale: Public) ma che vengono periodicamente chiusi (IE Quit) e svuotati (Set IE=Nothing); per "periodicamente" non si deve intendere necessariamente "al termine della navigazione corrente" ma va bene "di tanto in tanto", ad esempio al termine di una indagine che magari comporta la navigazione di parecchi link in successione.
Infine: "ovviamente" se un oggetto rimane attivo (mancanza di IE Quit e IE=Nothing) lo stesso oggetto non va ricreato [es con Set IE = CreateObject("InternetExplorer.Application")], altrimenti ti ritrovi con la memoria piena di processi iexplorer; potresti sostituire il Set IE = CreateObject("InternetExplorer.Application") con un piu' articolato
Codice: Seleziona tutto
If IE Is Nothing Then
    Set IE = CreateObject("InternetExplorer.Application")
End If

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Query Web con link

Postdi mpsinf » 22/12/12 15:43

Ho fatto tesoro del tuo insegnamento ed ho potuto constatare che nonostante siano presenti i comandi IE Quit e IE=Nothing, le 2 sessioni di iexplore.exe presenti nel task manager non vengono chiuse se non viene lasciato un po' di tempo, forse perchè nella mia macro tornando all'inizio ricrea la variabile Set IE ancora prima che il S/O "capisca" che deve chiudere IE.

Inoltre la macro alle volte (1 su 200/300 cicli) mi va in errore qui sul Set IE

Codice: Seleziona tutto
If IE Is Nothing Then
    Set IE = CreateObject("InternetExplorer.Application")
End If



Errore di run-time -2147023706 (800704a6)
Errore di automazione

Qualche suggerimento per evitare/gestire l'errore ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Query Web con link

Postdi Anthony47 » 23/12/12 10:23

I miei stress test sono stati fatti rischedulando la macro 1 secondo dopo la sua terminazione, non avendo mai problemi.
Se con un ritardo simile simile continui ad avere errori allora potresti inserire un
Codice: Seleziona tutto
On Error goto GErr
ReCO:
'ciclo di CreateObject
on Error Goto 0
e da qualche parte nella stessa macro, che non sia mai eseguita se non per OnError
Codice: Seleziona tutto
GErr:
myStart = Timer
Do
    DoEvents
    If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop
G=G+1
If G<10 then Resume ReCO
Stop
G=0 :Resume ReCO

In questo modo in caso di errore nella fase di createObject dovresti saltare alla routine GErr dove si aspetta 3 secondi prima di tornare a createObject; nel caso che si susseguano 10 errori consecutivi la macro va in Stop per consentirti qualche operazione di indagine sul motivo dell' errore.
Non l' ho collaudata, e' un "concept" che va quindi controllato e debuggato.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Query Web con link":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti