Ancora un
lavoro di Elio Buonocore email : elibuono@tin.it
Questa volta Elio propone una sua interpretazione basata su QueryWeb, per
l'importazione e la gestione di dati provenienti da tabelle di siti web, su
fogli di lavoro Excel. In particolare il lavoro è esemplificato su una
queryweb che punta ad una tabella di titoli azionari in un sito Yahoo, ed
è articolato su 4 punti, come Elio precisa:
-
La creazione di una QueryWeb ( nel lavoro questa punta ad una tabella di
titoli azionari in un sito Yahoo ) che importa i dati su un primo foglio di
lavoro. L'aggiornamento periodico della query deve essere eseguito
completamente prima che il codice proceda, altrimenti se procede in maniera
asincrona e, cioè, prima che l'importazione dati si completi, saranno
trasferiti al database di archivio ( punto 3 ) i dati dell'importazione
precedente ( modificazione dell'argomento BackgroundQuery del metodo Refresh
dell?oggetto QueryTable)
-
Creazione di una routine che aggiorna periodicamente ( macro periodica ) la
QueryWeb ( cioè è in grado di richiamare se stessa con intervallo di tempo
definito ): utilizzo del metodo OnTime dell'oggetto Application.
-
Creazione di una routine che trasferisce processandoli i dati dal primo
foglio di lavoro al database di archivio posto sul secondo foglio di lavoro.
Vi è un campo sul primo foglio di lavoro che presenta in concatenazione il
valore dell'azione e l'ora dell'ultima trattazione, perciò, nel
trasferimento dei dati, è necessario splittare il valore di questo campo in
quello di 2 campi distinti. Per aumentare la performance i cicli vengono
svolti su matrici e non su foglio di lavoro.
-
Un sistema che crei al volo un grafico al variare del valore selezionato sul
filtro del database di archivio che filtra il codice del titolo azionario.
Una macro attivata da azioni su AutoFilter. La soluzione di questo ultimo
problema non era facile. Infatti non esiste un evento Change dell'oggetto
AutoFilter. Sul Web ho trovato gli spunti che mi hanno portato alla
soluzione. Poiché quando si filtra si attiva l'evento Worksheet_Calculate si
può intercettare l'evento cercando di distinguerlo da altri che pure possono
attivare lo stesso evento. Per esempio si può memorizzare in una variabile
statica il valore del vecchio filtro, confrontandolo con il valore attuale
al momento dell'evento Worksheet_Calculate. Se i valori confrontati sono
diversi significa che l'evento Calculate è stato attivato dall'azione sul
filtro. In una cella del foglio di lavoro non contigua all'elenco ho immesso
una formula contenente la funzione CASUALE per garantire che l'evento
Calculate sarà attivato dall'applicazione del filtro.
Sul sito Yahoo vi sono link a pagine con grafici molto dinamici per tutti i
titoli azionari. Pertanto, il mio, vuole essere un lavoro di riflessione
sugli strumenti che il VBA presenta per la soluzione dei problemi sopra
indicati piuttosto che un applicativo diretto ( funzione che comunque svolge
per chi è appassionato di borsa ).
Il codice gestisce soltanto l'aggiornamento delle tabelle query presenti sul
primo foglio di lavoro (refresh). Per chi fosse interessato a creare una
QueryWeb da zero in VBA ho fatto un modulo specifico richiamato da un
pulsante sul Foglio DemoCreaQrWeb.
Elio quindi ha approfondito l'argomento arricchendolo di azioni, e inoltre
fornisce insieme al file xls, anche un file doc con spiegazioni. Sotto
un'immagine del foglio DbImportadati:
Ancora un grazie a
Elio per questo suo lavoro.
File consultabile e scaricabile: (comprende 2 file)
|