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
- Abre tu hoja de excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- En el menú elige Insertar / Módulo de clase
- En el panel del lado derecho copia la macro
- 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
.