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
?>
?>