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 » 20/11/12 08:19

Come al solito non mi sono espresso correttamente.
La macro non è che si fermi dopo alcuni cicli, lo fa a distanza di ORE ...!!
Anche se fermi poi la macro e la fai ripartire da un errore runt-time 1004 - Errore ne metodo Clear per la Classe Range.
Un comando che è sempre stato eseguito correttamente e quindi secondo me riconducibile solo ad un problema di gestione nella memoria. Infatti se tento di salvare il file mi crasha Excel..
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 » 20/11/12 10:04

No, stavolta era chiaro che il blocco era per saturazione di risorse e quindi non immediato.
Quello che voglio dire e' che se trovi in memoria tanti processi IExplorer e' perche' gli oggetti IE creati nelle macro non sono stati eliminati, cosa che viene fatta con le istruzioni IE.Quit / Set IE = Nothing.
Va quindi verificato che tutte le macro che cominciano con Set IE = CreateObject("InternetExplorer.Application") si completino sempre eseguendo le due istruzioni, controllando anche le eventuali uscite da "vie laterali" (ad esempio con Exit Sub).

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 » 23/11/12 08:24

Purtroppo nonostante abbia verificato entrate ed uscite corrette ed abbia limitato dal regedit di Windows di aprire più di 5 sessioni di IEXPLORER.exe dopo qualche ora mi va in errore la macro su Set IE = CreateObject("InternetExplorer.Application")
io penso perchè aprendone e chiudendone a centinaia/ora il buon Windows non riesca a recuperare (come tutte le sue versioni) le risorse precedentemente occupate.
A questo punto chiedo se ci fosse la possibilità di mantenere aperti quei 20/30 link finchè non vengono chiusi dalla macro stessa visto che comunque una gran percentuale rimangono abbastanza uniformi e gli altri debbano solo essere "refresh..ati" prima dell'analisi.
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/11/12 15:20

Certamente tenere una sessione attiva di IE e lavorare con quella e' fattibile, ma nel nostro caso credo che il problema sia legato all' oggetto IE ricreato ad ogni avvio di macro.
Quindi la prima prova da fare e' di inserire la dichiarazione di IE a livello di Progetto vba, usando
Codice: Seleziona tutto
Public IE As Object   'Rigorosamente in testa a un Modulo

Controlla poi con Task manager l' occupazione di memoria; nei miei test dopo circa 2000 cicli di una sub comparabile a quelle che ti ho suggerito con url di navigazione scelto casualmente da un elenco essa e' rimasta praticamente costante.

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...

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 » 25/11/12 17:18

Nonostante la dichiarazione "Public IE As Object" mi si satura la memoria di oltre 3GB e va in errore in Set IE = CreateObject("InternetExplorer.Application") questa volta con errore

Errore di run-time -2147467259 (80004005)
Errore di automazione
Errore non specificato

conosci qualche metodo per la "cancellazione" o riduzione del file iexplore.exe ? :mmmh:

considera che ogni ciclo avviene circa ogni 30 sec. e la memoria cala di 0,01 GB ogni minuto circa
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 » 25/11/12 23:46

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")

conosci qualche metodo per la "cancellazione" o riduzione del file iexplore.exe ?
Il processo IExplorer (iexplorer.exe) viene "ucciso" con IE.Quit /Set IE=Nothing

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 » 26/11/12 08:18

Quello che mi dici lo avevo già capito e messo in pratica è che mi sono accorto che se tengo aperta una qualsiasi finestra di internet il grafico della memoria continua a salire in occupazione, cosa che non accade quando è tutto chiuso.
Tu che prove hai fatto ?
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 » 26/11/12 13:44

Io non uso IE per le mie navigazioni.
Tenendo aperta la sessione IE generata dall' automazione e riusandola per le connessioni successive avevo gia' verificato che il processo iexplorer.exe si gonfiava al ritmo di circa 1.8 MB/ciclo (vedi post del 23-11 pomeriggio). Ma il tuo caso forse e' ancora diverso: quale versione di IE usi?

E comunque, se non usi IE durante l' esecuzione delle macro quale e' il comportamento?

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 » 26/11/12 20:23

Se non uso IE durante l'esecuzione mi rimane la memoria stabile e costante... !! :)
Mi suggerisci di usare un altro browser per controllare se i dati che acquisisce sono corretti, o per navigare intanto che la macro fa il suo lavoro ...?
Considerazione: La macro la faccio girare su un Excel avviato a parte, ma il costante saltellamente della macro da un foglio all'altro con la copia dei dati mi crea delle interferenze (tipo impossibilità di inserire dati dalla tastiera) sull' Excel che uso quotidianamente.. sai come poter risolvere la situation ?
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 » 27/11/12 01:19

Scusa, ma tu quando fai i calcoli con excel poi li controlli con la calcolatrice? Analogamente dopo che hai debuggato una macro penso che sia superfluo controllare assiduamente che le cose funzionino regolarmente; per i debug avevo inserito nella "macro tipo" un certo Stop, ma finito il debug mi aspetterei che le macro facciano ripetitivamente il loro lavoro senza supervisione continua.
Come pure nelle macro c' e' un ".Visible = True": anche questa e' per debug, finito il quale puoi eliminarlo o renderlo opzionale, ad esempio subordinandolo a un certo flag che imposti sul foglio di lavoro (ma questo non cambia il comportamento della memoria, anzi potrebbe peggiorarlo perche' non vedendo piu' la finestra potresti trovarti con piu' iexplorer in esecuzione in maniera invisibile).

Aprire di tanto in tanto IE una tua sessione di IE per altri lavori lo puoi fare, se poi sistematicamente la chiudi di tanto in tanto. Questa affermazione e' pero' solo un' ipotesi; non avendo tu risposto alla domanda "quale versione di IE usi", non posso fare di piu'.
Oppure installi un' altro browser e usi questo per le tue navigazioni, lasciando pero' IE come browser predeterminato.

Per evitare il saltelamento tra workbooks e worksheets devi fare in modo che la macro che va in esecuzione indirizzi sempre in modo esplicito il workbook e il worksheet; quindi non, ad esempio
non
Cells(I,1).Value = XYZ
Ma
Workbooks("IlMioFile.Xls").Sheets("IlMioFoglio").Cells(I,1).Value = XYZ

Se la macro girasse sul workbook su cui lavori potresti usare "ThisWorkbook" invece di " Workboks("IlMioFile.Xls")"

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 » 28/11/12 08:28

Proverò a dare i percorsi completi per vedere se migliora anche se girando su un Excel aperto a parte non pensavo potesse interferire con quello su cui lavoro.
Per quanto riguarda il problema di IE occupazione memoria ho installato Google Chrome ... farò qualche prova notturna..

Volevo chiedere un aiuto sul un valore.. Acquisendo dei dati da un sito mi trovo tra le varie righe del HTML questa riga
var time_offset=(new Date()).getTime()-1354086763*1000; (preso alle 8.23 circa di oggi 28/11)

poi dei valori TEMPORALI che sono quelli che interessano a me (ne prendo 2 a caso)
1354088024
1354088367

tra queste 2 cifre che "parlano" di data/ora di scadenza ci sono circa 3 minuti (2' - 53" precisamente)
vorrei riuscire a capire con quale "codifica" sono stati realizzati ossia se si può risalire a che data

facendo per esempio la dirrenza 1354088367 - 1354088024 = 343 se li divido per 2 = 173 che corrispondono a 2' 53" sec.
ma non capisco se è una casualità o effettivamente è così ma allora il n. 1354088024 a cosa è riferito visto il valore getTime()-1354086763*1000 ?

grazie
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 » 28/11/12 14:53

Purtroppo quando scrivi "Excel aperto a parte" tu intendi un "workbook a parte"; per avere indipendenza tra il tuo lavoro e le azioni della macro dovresti lavorare su una seconda instanza del programma Excel, e in effetti anche questo e' bypass al problema (anche se poi e' facile fare confusione).

Per quanto riguarda quei tempi, a spanne mi sembrano date/ore espresse in "base 1970", comune ai sistemi operativi Unix; cioe' secondi trascorsi dalle ore 0:00 del 1 gen 1970.
Puoi calcolare a cosa corrisponde uno di quei numerini con la nota formula
Codice: Seleziona tutto
=DATA(1970;1;1)+IlNumerino/86400


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 » 28/11/12 19:53

Per "Excel a parte" intendo un Excel che quando vai su finestra e ti fa vedere i file aperti vedi il nome del solo file su cui vado ad eseguire la macro.. quindi a me pare un istanza di Excel separte... ma anche così mi crea "interferenze" sull'altro Excel aperto con altri file.

Il discorso del tempo sembra ok "=DATA(1970;1;1)+IlNumerino/86400" anche se in anticipo di un ora rispetto all'ora corrente... ma poi analizzando meglio il listato html ho visto che è riportata anche l'ora e la data in "chiaro"... quindi proverò ad estrarre quella

Unica cosa su cui volevo delucidazioni:
la pagina che analizzo ha dei contatori alla rovescia che si aggiornano automaticamente, ma se vado su Visualizza origine vedo dei dati non aggiornati e così anche riprovando se apro una altra finestra sempre con visualizza origine vedo sempre gli stessi dati... penso che sia anche in parte logico, :mmmh: questo fintanto non faccio un F5 (aggiorna pagina web in visualizzazione) e poi visualizza origine e i dati sono aggiornati correttamente. Ora quello che volevo sapere è se con l'analisi "Set IE = CreateObject("InternetExplorer.Application") .Navigate myURL ecc. è sempre sulla pagina "aggiornata" all'ultima lettura giusto ?
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 » 29/11/12 02:08

Nelle prove che ho fatto io non ho interferenza tra le macro che girano in una istanza Excel e quanto avviene in una seconda instanza del programma; sia XL2003 che XL2010.

Negli esempi di macro che ti ho proposto e' presente una riga del tipo Set myColl = IE.Document.getelementsbytagname("TABLE"). Il sorgente sara' analizzato con i valori presenti in quel momento.

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 » 12/12/12 20:35

Con il codice qui sotto riesco a estrapolarmi i 2 dati di cui ho bisogno Link e n. asta

Codice: Seleziona tutto
A01_Aste_Home()

myURL = "http://www.prezzipazzi.com/"
Set IE = CreateObject("InternetExplorer.Application")
   
Sheets("Foglio3").Select
Range("A:C").Clear
   
With IE
    .navigate myURL
    .Visible = True
    Do While .Busy: DoEvents: Loop    'Attesa not busy
    Do While .readyState <> 4: DoEvents: Loop 'Attesa documento
End With

myStart = Timer
Do
    DoEvents
    If Timer > myStart + 3 Or Timer < myStart Then Exit Do
Loop

'cerca ed elenca Id e Descrizioni
Set myColl = IE.document.getElementsByTagName("a")
For Each myLink In myColl
    LTit = myLink.Title
    LLin = myLink.href
    If LTit <> "" And Len(LLin) = 17 + Len(Replace(Replace(LLin, "/prodotto/", ""), ".php?id", "")) Then
        Cells(I + 1, 1) = Mid(LLin, InStr(1, LLin, ".php?id", vbTextCompare) + Len(".php?id"), 99)
        Cells(I + 1, 2) = LTit
'        Cells(I + 1, 3) = LLin
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(I + 1, 3), Address:=LLin, _
            TextToDisplay:=LLin

        I = I + 1
    End If
Next myLink
IE.Quit
Set IE = Nothing
End Sub


Però dovrei estrapolare anche dalla stessa pagine html i dati che sono riportati in una parte più distaccata verso la fine a partrire da riga 2181 dopo

<script>
attiva[91793]=0;
setta_puntate(91793, '2012-12-12 20:13:00', 'inizia il 12 dicembre alle 20:13', 30, 0.00, 6, '10 Puntate e Gift Card da 5 euro','/prodotti/11503/11503_1.jpg', 0 );
attiva[79443]=1;
inizia_puntate(79443, 27, 0, 'Offerta pi&ugrave; alta:<br>jiaozilee', 120, 39.52, 288, 'Sector 230', '/prodotti/11381/11381_1.jpg', 0);

il riferimento che collega questi dati con quelli già estrapolati sono il n. d'asta [91793] da cui sulla riga a fianco alla tabella che ho già dovrei riportare l'ora di inizio es. '2012-12-12 20:13:00' oppure se è già iniziata come nel secondo esempio, i secondi che rimangono 27, 0 , relativo nome riportato dopo "alta:<br>"... e i seguenti valori su ogni colonna 120 39.52 e 288

sapresti indicarmi la modalità per associare le 2 cose ed averli implementati sulla lista che ottengo ora ?

grazie

P.S. per Antony .. hai più dato un occhiata al file che ti ho inviato ?
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 » 13/12/12 03:00

Puoi provare a esaminare la collezione degli "script"; ad esempio
Codice: Seleziona tutto
Set myColl = IE.document.getElementsByTagName("script")
For Each myItm In myColl
If Len(Left(myItm.innerhtml, 20)) <> Len(Replace(Left(myItm.innerhtml, 20), "attiva[", "")) Then
'
    MsgBox ("ZZ" & Left(myItm.innerhtml, 2000))
'
End If
Next myItm

Questa ti visualizzera' i dati a cui facevi riferimento.
Estrarre i campi di interesse e' a quel punto solo un gioco di pazienza.

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 » 13/12/12 08:19

Ti ringrazio per la solita celerità della risposta ma il problema è proprio da quella parte di codice finale che devo estrapolare ed associare i dati che ti dicevo, con unico riferimento il n. d'asta, considerando anche che non sono in ordine rispetto a quelli che ho ricavato precedentemente in tabella.
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 » 14/12/12 00:50

Con un primo gioco di pazienza normalizzi il contenuto importato; ad esempio con
Codice: Seleziona tutto
    Range("C1") = (Replace(myItm.innerhtml, "; " & Chr(10) & " setta_puntate", ", setta_puntate["))

ottieni un contenuto con campi separati da "virgola" che si spacchettano senza difficolta':
Immagine

Uploaded with ImageShack.us

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 » 14/12/12 08:38

Però la situazione che mi si presenta può essere di 2 tipi (che riporto qui avanti) e facendo riferimento alle sole virgole separatrici non posso ricavare esattamente quello che mi serve:

attiva[92227]=0;
setta_puntate(92227, '2012-12-13 20:40:00', 'inizia il 13 dicembre alle 20:40', 30, 0.00, 6, '10 Puntate e Gift Card da 5 euro','/prodotti/11503/11503_1.jpg', 0 );

attiva[79443]=1;
inizia_puntate(79443, 31, 6, 'Offerta pi&ugrave; alta:<br>jiaozilee', 120, 45.75, 288, 'Sector 230', '/prodotti/11381/11381_1.jpg', 0);

una volta che faccio la ricerca di 92227 devo estrapolare in separate colonne i seguenti dati:

in colonna D --> dato (0 o 1 che corrisponde ad attiva o non attiva)
in colonna E --> data (se valore in Dx è 0) oppure 2 valori che sono secondi e decimi vedi 31,6
in colonna F --> inizia il (ma non è importante visto che è stata estrapolata la data prima) oppure il nome dopo <br> se in Dx è 1
e i 3 valori 30, 0.00, 6 su altre 3 colonne separate.

da quale comando mi consigliate di partire ?
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 » 15/12/12 19:52

Una volta normalizzata la sstringa come da mia immagine, puoi usare una serie di "Split" per selezionare l' informazione che ti serve.
Ad esempio, se myVar contiene la stringa col valore normalizzato, usando poi questa sequenza otterrai in Split2(1) il valore 1 o 0
Codice: Seleziona tutto
Split0 = Split(myVar, Chr(10))
Split1 = Split(Split0(2), ",")
Split2 = Split(Split1(0), "=")
Debug.Print Split2(1)

Ho usato la funzione Split (vedi help on line), parcellizzando le varie componenti, in parti semrre piu' piccole: Split0 contiene le N righe del sorgente [le prime due sono vuote, quindi ho sotto-diviso la Split(2)]; Split1 contiene i vari campi separati dalla virgola; Split2 separa ad esempio "attiva[89767]" e il suo valore "0".
Split0, Split1 e Split2 sono variabili, non farti confondere dalla radice "Split".

Poi "e' un gioco di pazienza" a separare i campi che ti interessano nel caso 0 e quelli del caso 1

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

PrecedenteProssimo

Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti