Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio Best seller su VBA
(v. www.hoepli.it)


Il mio ultimo libro su Open XML
(v. www.FAG.it):



La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

lunedì 12 settembre 2011 #

Come inserire in una cella dati numerici da una TextBox

Da diverse parti mi giunge la segnalazione che una formula come la seguente è rigettata per errore a run-time:

ActiveCell = CDbl(TextBox1)

ove TextBox1 è una casella di testo di una UserForm. Ovviamente al posto di ActiveCell si può avere qualunque codice relativo a una cella (tipo Cells(3, 4) e simili). In verità a chi scrive l'inconvienente lamentato non si presenta...

Sia come sia, tali formule possono funzionare anche senza aggiungere .Text alla TextBox e senza premettere CDbl, ma in tal caso nella cella viene scaricata una literal (etichetta, in gergo Excel), preceduta da un apice ('). Dopo di che l'utente può tradurla in numero con l'opzione specifica suggerita (*). Scomodo no?

Ma se proprio si desidera imporre a Excel la nostra volontà, occorre e basta usare la proprietà Formula o FormulaR1C1 o persino Value. Con riferimento alla cella attiva e a una generica TextBox1:

ActiveCell.Formula = CDbl(TextBox1.Text)

Si ottiene anche la massima chiarezza.

(*) Il fatto èn che con ActiveCell = TextBox1 VBA assume (sottintende) la proprietà Value sulla cella e Text per la casella di testo. Insomma tale sintassi equivale ad ActiveCell.Value = TextBox1.Text.

A beneficio dei principianti concludo con una mini soluzione che obbliga l'utente a inserire "qualcosa" nella casella TextBox1 nonché un dato convertibile in un numero di tipo Double:

Private Sub CommandButton1_Click()
  Dim Num As Double
  On Error GoTo Errore
  If TextBox1.Text = "" Then
    TextBox1.SetFocus
    Exit Sub
  End If
  Num = CDbl(TextBox1.Text) ' Qui può scatenarsi l'errore
  ActiveCell.Formula = Num ' Limitandosi alla cella attiva, per semplicità
  Unload Me
  Exit Sub
Errore:
  MsgBox "Occorre un dato numerico!", vbCritical, "Errore"
  With TextBox1
    .Text = ""
    .SetFocus
  End With
End Sub

?>

?>

posted @ 11.07 | Feedback (0)