Pasar a mayúsculas en varios TextBox

Tengo el siguiente código para pasar a mayúscula pero lo realiza a un solo textbox y quiero que lo realice en todos los que tenga en el userform, considerando que tengo hasta 20 textbox

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

2 Respuestas

Respuesta
1

Tienes que crear la rutina para cada uno de los textbox y pegar el código en cada uno de ellos.

y no se podría hacer una orden para todos? considerando que serian nombres consecutivos como: textbox1, textbox2, textbox3 ............

Claro que se puede, Dante Amor te ha dado una excelente solución. Intenta implementar dicho código en tu proyecto, y nos comentas.

Respuesta
3

Una opción es que lo repitas para los 20 textbox:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
'...
Private Sub TextBox20_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub

La otra opción, para que funcione con todos tus textbox, es crear una Clase.

Pon el siguiente código en tu userform. Revisa que la línea con el Dim quede al principio de todo el código.

Dim colTbxs As Collection 'Collection Of Custom Textboxes
'
Private Sub UserForm_Initialize()
    Dim ctlLoop As MSForms.Control
    Dim clsObject As Clase1
    '
    Set colTbxs = New Collection
    For Each ctlLoop In Me.Controls
        If TypeOf ctlLoop Is MSForms.TextBox Then
            Set clsObject = New Clase1
            Set clsObject.tbxCustom1 = ctlLoop
            colTbxs.Add clsObject
        End If
    Next ctlLoop
End Sub
'
Private Sub UserForm_Terminate()
     'Destroy The Collection To Free Memory
    Set colTbxs = Nothing
End Sub

Pon el siguiente código en una Clase

Option Explicit
Public WithEvents tbxCustom1 As MSForms.TextBox 'Custom Textbox
'
Private Sub tbxCustom1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyAscii = Asc(UCase(Chr(KeyAscii)))
End Sub
'
Private Sub Class_Terminate()
    'Liberar memoria
    Set tbxCustom1 = Nothing
End Sub

Instrucciones para crear una clase

  1. Abre tu hoja de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo de clase
  4. En el panel del lado derecho copia la macro
  5. Revisa que el nombre de la clase sea : "Clase1"

Listo, puedes borrar tu evento

Private Sub TextBox1_KeyPress

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas