Tipo di dati. Formati di Conversione del tipo
di dati.
Conosciamo ed
abbiamo già visto in questa sezione, la funzione vba
Format, che ha il compito di predisporre il formato di un dato in
modo che noi possiamo vederlo restituito con il formato che abbiamo deciso.
Mi sono accorto
che esiste una certa confusione di interpretazione sul comportamento di ciò
che in realtà otteniamo con la funzione Format in vba, e vorrei cercare di chiarire
alcuni aspetti.
Quando siamo sul
foglio di lavoro e scegliamo "Formato Celle",
noi in realtà scegliamo il "TIPO DI DATI" che
una cella dovrà contenere, e nella finestra "Numero",
una volta selezionato il Tipo di dato, nella
parte destra appare il tipo di Formato con il
quale vogliamo che il dato ci venga mostrato nella cella.
E' quindi Excel
che provvede, attraverso le nostre decisioni, ad impostare sia il
TIPO di
dato, sia il FORMATO nella cella.
Quando ci troviamo a lavorare di codice, dovremo invece essere noi a
compilare le necessarie istruzioni sia per definire il formato, sia per il
tipo di dati. Per quanto riguarda il formato, useremo la funzione Format
(vba) che ha esclusivamente il compito di
predisporre il modo in cui un dato ci appare, per esempio
in una TextBox, o come il codice lo passa d una cella del foglio di lavoro. E' soprattutto questa differenza tra
Formato (Format) e Tipo di dati che genera confusione. In
parole povere questa istruzione:
TextBox1 = Format(TextBox1, "#,###.00")
determina SOLO il modo in cui il valore verrà
mostrato nella textbox o in una cella, ma NON dice
assolutamente ad Excel di che TIPO di dati
viene passato dal vba. Per comunicare quindi ad Excel il
TIPO di dati, è necessario dichiarare di che
TIPO di dati si tratta. Questa
operazione si chiama "CONVERSIONE DEL TIPO DI DATI".
Dovremo usare una sintassi specifica, per definire se è un numero intero o un numero con decimali, se è testo, o una
data, o un orario, ecc, in modo che il vba passi ad Excel il dato facendogli
capire di che cosa si tratta. Per fare questo possiamo procedere in diversi
modi:
Assegnare il Tipo di dati ad una variabile:
Dim MioValore As Double
MioValore = TextBox1.Value
Cells(1, 7).Value = MioValore
oppure, molto più semplicemente, senza usare il dimensionamento, così:
MioValore = TextBox1.Value
Cells(1, 7).Value = CDbl(MioValore)
o, più veloce ancora:
Cells(1, 7).Value = CDbl(TextBox1)
Tutti questi esempi restituiscono tutti un valore Double, cioè un numero con
decimali, e anche senza il Format nella Textbox, il dato che viene passato
al foglio viene riconosciuto come Double e corrisponderebbe all'azione che
avremmo fatto sul foglio di lavoro scegliendo da "Formato Celle", "Numero
con decimali". Ovviamente l'impiego della funzione Format in abbinamento
all'indicazione del Tipo di dato, ci avrebbe consentito di decidere anche
con quanti decimali il valore sarebbe stato poi visualizzato nella cella.
Esempio:
TextBox1 = Format(TextBox1, "#,###.00")
Cells(1, 7).Value = CDbl(TextBox1)
oppure, in un unica istruzione:
Cells(1, 7).Value = CDbl(Format(TextBox1, "#,###.00"))
ed il valore restituito in G7 sarà Double a due decimali anche se noi avremo
1354,8792
Quando si adopera "Tipi di dati" numerici, bisogna sempre ricordarsi che la textbox non può restare vuota, pena un errore di debug, (il vuoto per il vba
NON corrisponde a zero) ma bisogna impostare un istruzione tipo questa
If TextBox1 = "" Then TextBox1 = 0
e ovviamente va posizionata prima del comando di trasferimento al foglio.
If TextBox1 = "" Then TextBox1 = 0
Cells(1, 7).Value = CDbl(TextBox1)
Per quanto riguarda il Tipo di dati, la guida a questo proposito è comunque
ben fornita, solo che bisogna conoscere come cercare. Nella guida dell'editor
del visual basic, andare
sull'indice, digitare : Funzione, e nella finestra sotto più grande (la 3)
dove c'è scritto: selezionare un argomento,
scorrere fino a trovere.
"Funzioni di conversione del tipo", selezionare l'argomento, e sulla destra
ve
li trovate tutti. E comunque i più usati sono:
CDate - per indicare che si sta trasferendo una
data, ed è utile usare prima una variabile per definire il formato data,
esempio
MyStr = Format(TextBox1, "h:m:s")
Cells(1, 7).Value = CDate(MyStr)
CDbl - per tutti i numeri positivi o negativi con decimali (idem c.s. per
definire il formato numerico)
CLng - per interi numerici
CInt - tipo di dati integer
CStr - tipo di dati stringa (formato testo)
Val - più generico per numeri o testo (o solo numeri se presenti in una
stringa)
Cells(1, 7).Value = Val(TextBox1)
Buon lavoro.
prelevato sul sito http://ennius.interfree.it |