Considerando que los controles TEXTBOX son controles de 'textos', para trabajarlos con valores numéricos tendremos que controlar su ingreso y además luego darle un formato apto para utilizarlos en cálculos numéricos.
Los principales eventos que utilizaremos en este primer ejemplo son:
- KEYPRESS : nos permite controlar cada caracter (KeyAscii) introducido.
- EXIT : nos permite asignar un formato al salir del control, y también controlar contenidos o aplicar restricciones.
En el Userform1 tenemos 3 controles TextBox.
En el primer control, TextBox1, no hay restricciones. Se reciben números, letras y caracteres alfanuméricos. Solo se indica que en caso de ser un contenido numérico, le aplique formato moneda corriente (ver NOTAS al pie).
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'al salir se aplica formato
If VBA.IsNumeric(TextBox1.Value) And TextBox1
<> "" Then
TextBox1 =
Format(TextBox1.Value, "$ #,###,##0.00")
End If
End Sub
En el segundo control, TextBox2, solo se permiten números, coma decimal y signo -
Private Sub TextBox2_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
If (KeyAscii < 48 And KeyAscii <> 44 And
KeyAscii <> 45) Or KeyAscii > 57 Then
KeyAscii =
0
MsgBox
"Solo ingresa números, signo menos y coma decimal"
End If
End Sub
Y al salir del objeto, se aplicará formato moneda:
Private Sub TextBox2_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
TextBox2 =
Format(TextBox2.Value, "$ #,###,##0.00")
End Sub
En el tercer objeto, TextBox3, solo se permiten números.
Private Sub TextBox3_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
If (KeyAscii < 48 Or KeyAscii > 57) Then
KeyAscii =
0
MsgBox
"Solo ingresa números."
End If
End Sub
La restricción que le aplicamos a este control, y que se evalúa en el evento EXIT, es decir al momento de salir de él, es que tenga un máximo de 6 caracteres. Y se le aplica un formato especial del tipo 000-000.
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)NOTAS:
La función LEN nos devuelve el total de caracteres que presenta el control TextBox.
La instrucción Cancel = True hará que el cursor permanezca en el control hasta cumplir con la condición de los 6 caracteres. Esto no sucede si utilizamos el evento AfterUpdate.
El formato 'moneda' puede ser indicado también de este modo, para que se tome la moneda corriente del usuario.
TextBox2 = Format(TextBox2.Value, "Currency")
Descargar ejemplo del Userform1 desde aquí o solicitarlo al correo: cibersoft.arg@gmail.com
Acceso al VIDEO Nº 73 desde aquí.