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:

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

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

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

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

nome file dimensione
QueryWeb.zip 142 Kb