A vueltas con los "UserForm" -Máscaras en sus TxtBox, y otras cuestiones menores-

En un UserForm de Excel le pido al usuario que introduzca una serie de valores que luego, una vez validados por éste, se copian a una hoja de cálculo que permanece abierta en segundo plano.

Pretendo filtrar que los datos que se introduzcan en el UserForm tengan la máxima coherencia y para ello quisiera:

1.- Que un TextBox del UserForm dispuesto para recoger una fecha lo haga con la máscara dd/mm/aaaa.

2.- Que otro TextBox destinado a recoger un número, recoja exactamente eso, un número.

3.- Que los ComboBox dispuestos en el UserForm, sólo admitan los valores "SÍ" "NO", que en el evento Initilize de éste les he dado -AddItem-.

4.- Que al recibir el foco los ComboBox desplieguen la lista de los valores subyacentes en él -Dropdown-.

Con lo anterior creo que termino -hasta donde se puede decir que un programa se ha cerrado, que me temo es NUNCA...- con los maravillosos UserForm de Excel.

1 respuesta

Respuesta
1

Revisa lo siguiente:

1. No existe en VBA una máscara para fecha. Debes buscar un código y adaptarlo a tu textbox. Te pongo un par de ejemplos:

Userform vba problem | MrExcel Message Board

USERFORM VBA Textbox Format Date and Time | MrExcel Message Board

2. Si solamente quieres capturar un dígito:

- Cambia la propiedad MaxLength a 1

- Pon este código para tu textbox:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Por.Dante Amor
    If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
        KeyAscii = 0
    End If
End Sub

3. Cambia la propiedad Style del combo a "fmStyleDropDownList"

4. Pon el siguiente código en los comobox:

Private Sub ComboBox1_Enter()
  ComboBox1.DropDown
End Sub

Como podrás ver lo más complicado es la fecha, para que solamente admita dd/mm/aaaa y sea una fecha válida. Reviso si encuentro algo más y lo pongo aquí.

No olvides la valoración.

Gracias Dante    : - )

Todo bien menos  la respuesta a la pregunta referente a la limitación a la lista subyacente a los combos.

La propiedad actual de mis combos es 'fmStyleDropDownCombo' -la opción de defecto-, pero en el momento que la cambio a la otra opción posible y que es la que me apuntas, 'fmStyleDropDownList', el editor de VBA me lanza el mensaje "Error 380. No se puede configurar la propiedad Value. Valor de propiedad no válido", y al dar a depurar aquél me presenta en amarillo fosforito la línea 'UserFormEnLaQueFiguranLosCombosModificados.Show'

"Error 380. No se puede configurar la propiedad Value. Valor de propiedad no válido", y al dar a depurar aquél me presenta en amarillo fosforito la línea 'UserFormEnLaQueFiguranLosCombosModificados.Show'

Lo anterior es un problema en el código que tienes en el userform.

Entonces utiliza el siguiente código para permitir solamente valores del combo:

Private Sub ComboBox1_Change()
  If ComboBox1.ListIndex = -1 Then
    ComboBox1.Value = ""
  End If
End Sub

[No olvides la valoración.

Perfecto, Dante, gracias una vez más!!!!

Me podrías dar una pista acerca del 'problema ' que puedo tener en el código asociado al UserForm? 

Pon aquí todo tu código.

Cuando hagas la ejecución, hazla paso a paso ejecutando el código con F8, línea por línea hasta llegar a la línea con el problema.

El error es porque no puede abrir el userform porque encontró un error antes de poder abrirlo.

También revisa cómo estás cargando los datos en los combos: con AddItem, con Value, con List, con RowSource.

Algún método te está enviando error.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas