Hai ragione ixa, mi ero già accorto (proprio con le indicazioni che hai dato per effettuare il debug) che si fermava su quella istruzione, ma non capivo il perchè. Io avevo proprio tolto la funzione STR() perchè tanto la variabile di input era già definita come stringa.
Volevo invece soffermarmi un pochino (per chi non è così "ferrato" nella programmazione) a spiegare le istruzioni usate da me e da ixa...
in particolare:
For Ind = 1 To Len(Valore_in_Cella)
If IsNumeric(Mid(Valore_in_Cella, Ind, 1)) Then stefy = stefy + Val(Mid(Valore_in_Cella, Ind, 1))
Next Ind
LEN(...) è una funzione che (come quella che abbiamo costruito noi, ma questa esiste già e fa parte del linguaggio) prende in input una "stringa di caratteri" (una parola, una frase ecc.) e "ritorna" la lunghezza, cioè il numero di caratteri da cui è formata. Questa è un po la chiave che ci consente di risolvere un problema dove quello che scriviamo (come nel nostro caso) può essere più lungo o più corto.
For Ind = 1 To Len(Valore_in_Cella)
...
Next Ind
Questo gruppo di istruzioni si dicono "iterative" in quanto è un sistema per eseguire una certa operazione un numero N di volte. In queto caso tutte le istruzioni che sono scritte tra l'istruzione FOR e quella NEXT vengono ripetute tante volte quanti sono i numeri tra 1 ed il "Numero di Caratteri che compone la parola o frase scritta in Valore_in_Cella" (cioè il valore ritornato dalla funzione Len() ) ed ogni volta che queste istruzioni vengono ripetute, nel campo "Ind" ci sarà un valore numerico che parte da 1 e viene incrementato di 1 in ogni ciclo fino ad arrivare al suo massimo.
Mid(Valore_in_Cella, Ind, 1)
Mid() è un'altra funzione che ha tre parametri in input, e ritorna della stringa messa come primo carattere, i caratteri a partire dal valore contenuto nel secondo parametro per una lunghezza di caratteri definita con il terzo parametro... quindi messa dentro il ciclo for di prima l'istruzione consente di prendere di volta in volta un carattere alla volta della stringa di input e... farci quello che vogliamo...
Siccome volevamo sommare tutte le cifre del numero dato in input...
stefy = stefy + Val(Mid(Valore_in_Cella, Ind, 1))
Val è un altra funzione che converte una numero dal formato "stringa" al formato "numerico"...
Un campo o "variabile" in formato stringa può contenere qualsiasi carattere stampabile della tastiera, lettere, numeri, simboli, punti, virgole ecc. mentre un campo definito numerico può contenere soltanto numeri, ma è l'unico campo con cui si possono eseguire delle operazioni algebriche. Quindi se vogliamo eseguire operazioni con numeri contenuti in un campo stringa dobbiamo convertirli in numerico con la vunzione VAL(). Naturalmente se nella stringa che diamo in input alla funzione non c'è un numero, la funzione ritorna zero.
Domani (se a qualcuno può interessare) parliamo un pochino dei valori booleani e dell'istruzione IF
Ciao