Grafico utilizzando il "controllo ActiveX" MSCHRT20.OCX. - pagina vista: volte Sul sito abbiamo già visto come creare grafici utilizzando le risorse di Excel per creare grafici usando istruzioni vba. Esiste in Excel una varietà veramente notevole di tipi di grafico, ed ognuno può sbizzarrirsi nel realizzare il grafico che più gli aggrada o che si adatta meglio a rappresentare una sua serie di dati o valori. E' pur vero che per realizzare un grafico in vba, viste le molteplici opzioni disponibili di settaggi e impostazioni delle caratteristiche di un grafico, in genere è necessario compilare un gran numero di righe di istruzioni di codice. Esiste la possibilità di creare grafici anche utilizzando il controllo aggiuntivo ActiveX MsChrt20.ocx, se disponibile è nella cartella System32 di Windows. Per aggiungere questo controllo potete seguire le spiegazioni contenute nell'art. "Date e gli errori di scrittura" presente in questa sezione; la procedura è la stessa, dovremo solo mettere un segno di spunta alla voce : "Miscosoft Chart Control 6.0" corrispondente alla libreria MsChrt20.ocx, oppure altra versione disponibile sul proprio computer come "Microsoft Chart Control, versione 5" corrispondente alla libreria Mschart.ocx (il risultato sarà il medesimo). Uno dei vantaggi nell'uso di questo controllo è che avremo bisogno di un numero inferiore di istruzioni per ottenere la risultanza grafica desiderata, anche se non tutte le possibilità di settaggi saranno disponibili, ma per i tradizionali grafici, andrà più che bene. Sono infatti disponibili, per decidere il tipo di grafico, solo queste impostazioni, impostando la proprietà CharType del controllo:
Il controllo possiede numerose proprietà, le cui impostazioni di default ci mostrano, una volta posizionato il controllo su una UserForm, in modalità progettazione (dal VBE), questo controllo evidenziato in rosso: Come si nota, il controllo porta, nell'area grafico alle due estremità in verticale, la scala valori ripetuta anche a destra, mentre l'area centrale è divisa in righe (Row : R1, R2, ecc.) ognuna delle quali ospita un certo numero di colonne (Column): è un grafico a barre 2D (che è l'impostazione di default : VtChChartType2dBar). Per impostare le proprietà necessarie alla formazione del grafico, possiamo scegliere l'evento Activate della UserForm sulla quale abbiamo posto il controllo; vediamo le proprietà su cui agire per fornire le impostazioni necessarie:
Vediamo ora come impostare le procedure, facendo due esempi pratici e semplici, su due situazioni tipiche:
Come vedrete le routine sono veramente brevi. Primo grafico: poichè avremo bisogno di vedere in un'unica area il totale dei valori dei tre nominativi, imposteremo la proprietà RowCount a 1, mentre essendo tre i valori da visualizzare impostiamo la proprietà ColumnCount a 3; lo stesso per impostare il numero di etichette che vorremo vedere (una per ogni nome)
e questo è in nostro grafico ottenuto con le istruzioni appena viste: Da notare che le due scale valori vengono impostate in automatico nel grafico in funzione del massimo valore memorizzato nella proprietà Data, e variando il valore max tutta l'area del grafico sarà ridimensionata rispettando la nuova scala. Proprio comodo, veramente. Secondo Grafico: in questo caso, volendo rappresentare l'andamento dei (valori dei) tre nominativi, per ogni giorno, in un intervallo di giorni, abbiamo bisogno di stabilire quanto è ampio l'intervallo, cioè il numero di quanti giorni (righe) vogliamo rappresentare; questo numero sarà il numero che definirà quante righe (RowCount) impostare. E per ogni riga vorremo vedere 3 colonne (ColumnCount), cioè i tre nominativi "visti" giorno per giorno. 3 anche per impostare il numero di etichette che vorremo vedere. Tanto per intenderci, vogliamo ottenere un grafico così: In fase di progettazione sarà possibile stabilire dinamicamente l'intervallo da visualizzare, e quindi rilevare il numero di righe che servono a impostare il valore da assegnare a RowCount, (lo stesso sarà per le colonne) sia reperendo gli indici di riga delle date di inizio e fine (cioè dei numeri di riga, sul foglio) usando indici mobili (es. due celle dove scrivere il primo numero riga foglio e il finale intervallo) o anche InputBox per richiedere inizio riga e fine riga intervallo, e facendo la differenza. Per semplificare, in questo esempio ho preso 10 righe: l'intervallo tra la data 01/01/05 e 19/01/05. Teniamo presente che maggiore sarà l'intervallo e quindi il numero di righe (RowCount) da visualizzare, minore sarà lo spazio a disposizione nell'area grafico, a parità di dimensione del Form e del controllo MSGraf. Altra considerazione da fare è che avremo bisogno di un doppio ciclo For Next : un ciclo esterno che scorra tutte le righe del grafico e in contemporanea dell'intervallo delle date previste, ed un ciclo interno che, per ogni riga del grafico, scorra i tre valori dei nominativi, (le tre colonne sul foglio), e carichi (la matrice) Data con i valori letti nelle celle. Altra cosa da chiarire è l'utilizzo della proprietà ColumnLabel dell'oggetto DataGrid; questa proprietà che determina il testo delle etichette, ha bisogno di due argomenti da definire per sapere a quale colonna assegnare il testo: il numero di colonna (che inizia sempre da 1 e non da zero), e l'indice di etichetta che identifica un'etichetta specifica. (Se in una colonna esistono più livelli di etichette, è necessario identificarne uno solo. Le etichette delle colonne sono numerate dal basso in alto a partire da 1). Vediamo le istruzioni per generare il grafico visto sopra:
L'efficacia visiva è garantita, e se poi vorremo munire il grafico di pulsanti di opzione, in modo da cambiare il tipo di grafico dopo che è stato creato, potremo usare degli OptionButton ai quali assegnare semplici istruzioni che modificano il tipo di grafico a piacere (tra i tipi visti all'inizio), per esempio per vedere un grafico in Area3d, potremo usare :
e vedremo il grafico sopra così: oppure vederlo con Barre 3D, così: Un ultimo vantaggio: se spostiamo il mouse sull'area grafico, quando è un grafico 3D, se premiamo il tasto CTRL (Control), il puntatore del mouse assume la forma di una freccia semisferica a quattro punte; premendo il pulsante sinistro del mouse sopra il grafico, potremo spostare, ruotandolo in tutte le posizioni, il grafico. Unico difetto riscontrato in 3D, la non perfetta leggibilità dei valori sul grafico.
Buon lavoro. prelevato sul sito www.ennius.altervista.org |