Condividi:        

[Excel] Acquisizione dati Web in realtime

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] Acquisizione dati Web in realtime

Postdi Anthony47 » 18/11/12 19:33

La struttura dei tuoi dati non mi e' mai stata chiara, per cui non ho idea di che cosa stai facendo e come.
Personalmente non sono quindi in grado di suggerire alcunche'.

In quanto al discorso del foglio Home, evidentemente nella A2_Estrai_valori c' e' anche la possibile eliminazione del foglio attivo; se e' cosi', allora non solo hai un errore quando questo capita sull' ultimo foglio prima di Home, ma non avrai analizzato la situazione di tutti i fogli che si trovavano dopo un qualsiasi foglio cancellato.
Il mio suggerimento e' che ragioni a indice decrescente, cioe'
Codice: Seleziona tutto
For nfg Sheets.Count -1 to 1 step -1
'....
Next I

In quanto al riposizionamento dei fogli, credimi sarebbe solo peggiorativo: l' ordinamento e' un' operazione iterativa che richiede parecchi millisecondi; testare se un certo valore su un certo foglio e' inferiore a un tot richiede invece pochi microsecondi.

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

Sponsor
 

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 18/11/12 19:54

Indipendentemente dal tempo impiegato sapresti suggerirmi il codice per ordinare dei fogli in base al valore crescente presente in cella A1 al loro interno. Grazie.

P.S. Mi ero sforzato nel post precedente con una lunga descrizione ... Peccato :cry:
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi Anthony47 » 19/11/12 00:16

Ad esempio:
Codice: Seleziona tutto
Sub ShSort()
ShTot = Sheets.Count
For Loop1 = 1 To ShTot
    For Loop2 = Loop1 To ShTot
        If Sheets(Loop2).Range("A1").Value < Sheets(Loop1).Range("A1").Value Then _
            Sheets(Loop2).Move Before:=Sheets(Loop1)
    Next Loop2
Next Loop1
End Sub

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

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 01/12/12 15:48

da oggi l'estrapolazione dei dati da pagine html con

Codice: Seleziona tutto
MsgBox myTag.innertext
      If Len(myTag.innertext) > 1 Then
       Range("D1").Offset(i, j) = myTag.innertext


dove Msgbox myTag.innertext visualizza 01/12/2012 14:49:24
in cella D1 mi ritrovo 12/01/2012 ossia il mese con il giorno INVERTITI....

sapete suggerirmi come fare ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi ricky53 » 01/12/12 16:39

Ciao,
prova con
Codice: Seleziona tutto
 Range("D1").Offset(i, j) = Format(myTag.innertext, "dd-mm-yyyy")
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 01/12/12 17:29

Avevo già provato ma non funziona...
Inoltre, quello postato essendo una parte di codice al'interno di un ciclo for next, dove carica 4 dati differenti, quando deve caricare il dato composto da un numero es. 2,12 viene convertito in data pure quello e logicamente non va bene.
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi ricky53 » 01/12/12 17:41

Ciao,
il dato che ricevi è come l'hai scritto?
io ho provato con il tuo dato ed ho ottenuto la data in formato italiano

Prova in quest'altro modo
Codice: Seleziona tutto
 Range("D1").Offset(i, j) = Format(CDate(myTag.innertext), "dd-mm-yyyy")



Non mi è chiaro quanto hai scritto
... quando deve caricare il dato composto da un numero es. 2,12 viene convertito in data pure quello e logicamente non va bene.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 01/12/12 18:24

Sì ... il dato che visualizzo con msgbox è proprio 01/12/2012 14:49:24
Ho provato come dici tu ma non funziona nemmeno con CDate, però se al posto di dd-mm-yyyy metto dd/mm/yyyy hh:mm:ss me lo scrive correttamente ma la cella selezionata rimane stringa e non numero.

Quello che intendevo, per quanto non ti è chiaro, è che il myTag.innertext durante il caricamento da web assume valore sia come data sia come testo e come numero, quindi se formatto il testo con CDate la macro mi va in errore.
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi ricky53 » 01/12/12 18:44

Ciao,
va inserito un controllo (IF) sul dato in arrivo e formattare in base al dato arrivato.
Tu sai cosa arriva?

Se non si va nel riservato puoi inviarci il link del sito dal quel prendi i dati ed un file di esempio ?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Acquisizione dati Web in realtime

Postdi ricky53 » 01/12/12 19:04

Ciao,
e così?
Codice: Seleziona tutto
Range("D1").Offset(i, j) = myTag.innertext
Range("D1").Offset(i, j).NumberFormat = "dd/mm/yyyy"
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 01/12/12 19:19

Range("D1").Offset(i, j) = myTag.innertext

non può andare perchè una volta "scritto" il valore in D1 appare già come 12/01/2012 e poi comunque mi formatta anche quando estrae il dato in formato numero.


Codice: Seleziona tutto
For Each myTag In TagColl
    If Left(myTag.ID, 19) = "stringa da cercare_" Or MyFound Then
       If Len(myTag.innertext) > 1 Then
       Range("D1").Offset(i, j) = myTag.innertext
       End If
      MyFound = True
      j = (j + 1) Mod 4
      i = i - 1 * (j = 0)
      If i > 9 Then Exit For ' Per uscire dal ciclo dopo aver acquisito i 10 dati
      End If
Next myTag


Come vedi dalla struttura i 4 dati che ciclicamente "pesca" dal web sono
data ---> 01/12/12 18:00:00
nome ---> Pippo
numero --> 2,15
tipo ----> stringa

tutto perfetto da tempo fino ad oggi quando 1/12 diventato 12/1
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi ricky53 » 02/12/12 01:34

Ciao,
rinnova la richiesta che ti ho fatto in un mio precedente intervento:
Ricky53 ha scritto:Se non si va nel riservato puoi inviarci il link del sito dal quel prendi i dati ed un file di esempio ?
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Acquisizione dati Web in realtime

Postdi Anthony47 » 02/12/12 02:39

Se non vuoi dare l' url da cui prendi i dati, abbi almeno la bonta' di citare il sorgente html...
Comunque si tratta di una "stringa" che indica una data, e il vba se la traduce nel suo formato preferito, cioe' all' americana: "mese, giorno, anno".
Per evitare che il vba faccia del suo meglio, ma spesso sbagliando, devi dirgli tu che cosa fare; e "anche stavolta" devi usare CDate.

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

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 02/12/12 09:25

Ho risolto in modo "poco elegante" modificando la parte centrale del codice postato precedentemente

Codice: Seleziona tutto
If Left(myTag.ID, 19) = "last_bids_datetime_" Or MyFound Then
     If Len(myTag.innertext) > 1 Then
      If j = 0 Then
       Range("D1").Offset(i, j) = CDate(myTag.innertext) ' per evitare date anomale
      Else
       Range("D1").Offset(i, j) = myTag.innertext
      End If
     End If
     
      MyFound = True
      j = (j + 1) Mod 4
      i = i - 1 * (j = 0)
      If i > 9 Then Exit For ' Per uscire dal ciclo dopo aver acquisito i 10 dati
     End If
   
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi Anthony47 » 02/12/12 09:41

Hai fatto quello che ti ho detto di fare, bravo.

Prego.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 02/12/12 10:08

si ma la data che mi visualizza è del tipo
02/12/2012 8.56 (anche se nella barra in alto di Excel (fx) mi fa vedere 02/12/2012 8.56.03 :o

mentre io la vorrei
27/11/2012 23:13:28 ossia l'ora con i due punti ed i secondi

se tento di formattarla con

Codice: Seleziona tutto
Format(CDate(myTag.innertext), "dd-mm-yyyy hh:mm:ss")


oppure
Codice: Seleziona tutto
Format(CDate(myTag.innertext), "dd/mm/yyyy hh:mm:ss")


non è più un valore ma una stringa !

inoltre mi fa vedere l'ora sempre tipo hh.mm.ss con il punto invece dei 2 punti
non è un grosso problema per la visualizzazione è che poi non vorrei che mi creasse altri problemi visto che già con la data sta diventando un ginepraio.

comunque posto anche il codice html da esaminare

ID="last_bids_datetime_1">02/12/2012 09:58:33</TD><TD STYLE="font-family: verdana; text-align: left; padding: 0; overflow: hidden" ID="last_bids_username_1">centaurus</TD><TD STYLE="text-align: right; padding: 0; padding-right: 4px; width: 50px" ID="last_bids_amount_1">€0.02</TD><TD STYLE="text-align: left; padding: 0" ID="last_bids_type_1">Manuale</TD></TR><TR><TD STYLE="text-align: right; padding: 0; padding-right: 4px; width: 120px" ID="last_bids_datetime_2">02/12/2012 09:57:22</TD><TD STYLE="font-family: verdana; text-align: left; padding: 0; overflow: hidden" ID="last_bids_username_2">Uralsportsman</TD><TD STYLE="text-align: right; padding: 0; padding-right: 4px; width: 50px" ID="last_bids_amount_2">€0.01</TD><TD STYLE="text-align: left; padding: 0" ID="last_bids_type_2">Manuale</TD></TR><TR><TD STYLE="text-align: right; padding: 0; padding-right: 4px; width: 120px"
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 02/12/12 10:38

Proseguo inserendo codice precedente al 1 dicembre da cui estraevo correttamente sia la data che i 2 punti di suddivisione per l'ora

ID="last_bids_datetime_1">30/11/2012 23:56:57</TD><TD STYLE="font-family: verdana; text-align: left; padding: 0; overflow: hidden" ID="last_bids_username_1">lamud</TD><TD STYLE="text-align: right; padding: 0; padding-right: 4px; width: 50px" ID="last_bids_amount_1">€1.56</TD><TD STYLE="text-align: left; padding: 0" ID="last_bids_type_1">Automatica</TD></TR><TR><TD STYLE="text-align: right; padding: 0; padding-right: 4px; width: 120px" ID="last_bids_datetime_2">
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi Anthony47 » 03/12/12 02:42

Ripetiamo:
-il tuo "innerText" e' una stringa di testo (lo dice anche il nome)
-quando vba mette un testo in una cella, con la sua perversa buona volonta' cerca di adattare "la natura" del dato a quella che ritiene una situazione probabile; ad esempio
a)se la target cell e' formattata "generica" e una stringa sembra una data, allora vba trasforma quella stringa in data, se si puo' trasformare in data
b)se la target cell e' formattata Testo, il vba cerca di mantenere il formato testo anche se il suo dato e' di natura diversa dal testo (es un numero o una data)
Da a) discende che "30/11/2012 23:56:57" (che in partenza e' un Testo) rimane un testo quando lo infili in una cella, anche se la cella fosse formattata "data", perche' per il vba non esiste il giorno 11 del mese 30.
Dallo stesso a) discende che "02/12/2012 09:58:33" (che in partenza e' un Testo anche lui) sara' invece felicemente trasformata dal vba in Feb-12-2012 09h58m33sec
Per "governare" la situazione hai usato la funzione CDate, che converte una stringa in una data (cioe' cambia la natura del dato).
CDate("30/11/2012 23:56:57") ti restituira' la data/ora 30-nov-2012 23h56m57sec
CDate("02/12/2012 09:58:33") ti restituira' la data/ora 2-dic-2012 09h58m33sec
Come saranno rappresentate queste informazioni sul foglio Excel? Secondo le impostazioni internazioni del tuo pc; in Win 7 sono in Pannello di controllo, Paese e lingua; in Xp le trovi in Pannello di controllo, Impostazioni internazionali.

Cio' detto, se fino al 30-11 il tuo foglio funzionava come desideravi allora potresti considerare di continuare a mettere anche le nuove date/ore in formato Text, usando una delle istruzioni che hai gia' provato.

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

Re: [Excel] Acquisizione dati Web in realtime

Postdi mpsinf » 03/12/12 19:26

Alla fine ho risolto con l'inserimento all'inizio dell'acquisizione con una formattazione delle celle dove vado ad inserire le date
Codice: Seleziona tutto
Range("D:D").NumberFormat = "dd/mm/yyyy hh\:mm\:ss"

e poi formattando solo il primo dato che acquisisco da web che è la data

Codice: Seleziona tutto
 If j = 0 Then
       Range("D1").Offset(i, j) = CDate(myTag.innertext)
      Else
       Range("D1").Offset(i, j) = myTag.innertext
 End If


Invece volevo un aiuto sul fatto che dopo circa 2 ore di "chiamate" web (ho provato anche su PC W7+Office 2007) mi si blocca la macro sull'istruzione

Codice: Seleziona tutto
  Set IE = CreateObject("InternetExplorer.Application")


cosa posso fare ?
XP + Excel 2003 Ita
W7 + Excel 2007 Ita
mpsinf
Utente Senior
 
Post: 168
Iscritto il: 03/09/03 18:33

Re: [Excel] Acquisizione dati Web in realtime

Postdi Anthony47 » 03/12/12 22:30

Qualche ulteriore dettaglio? Es in che modo fallisce l' istruzione CreateObject, dove e come hai definito l' oggetto IE, lo stato delle risorse del pc al momento del problema.

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

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Acquisizione dati Web in realtime":


Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti