Hacer que solo se puedan poner números en muchos textbox

Hola.!! Tengo un Userform con 80 textbox para la carga de datos, estos datos pueden ser solamente números, tengo resuelto esto pero para un textbox en particular:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
'KeyAscii = 8 es el retroceso o BackSpace
If KeyAscii <> 8 And KeyAscii <> Asc(".") Then
KeyAscii = 0
End If
End If
End Sub

La consulta es como puedo aplicar este código para que aplique a todos los textbox a la vez ( se me había ocurrido con algún bucle for next, pero no encontré la forma ).

Desde ya muchas gracias.

Slds,

1 Respuesta

Respuesta
1

Hay que crear una clase.

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

Option Explicit
Public WithEvents tbxCustom1 As MSForms.TextBox 'Custom Textbox
'Referencia
'http://www.ozgrid.com/forum/showthread.php?t=80631
Private Sub tbxCustom1_Change()
     'Message Box To Display Which Textbox Was Changed
    'MsgBox "You added A Number To: " & tbxCustom1.Name
     'This is just to show you can handle multiple events of the textbox
End Sub
Private Sub tbxCustom1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim n As Integer
     'Allow only Numbers To be Entered Into Textbox
    n = KeyAscii
    Select Case KeyAscii
    Case 46 To 57 'números (./0123456789)
    Case Else
        KeyAscii = 0
    End Select
End Sub
Private Sub Class_Terminate()
     'Destroy The Class Object And Free Up Memory
    Set tbxCustom1 = Nothing
End Sub

Ahora en tu formulario copia esto

Dim colTbxs As Collection 'Collection Of Custom Textboxes
Private Sub UserForm_Initialize()
    Dim ctlLoop As MSForms.Control
    Dim clsObject As clsObjHandler
     'Create New Collection To Store Custom Textboxes
    Set colTbxs = New Collection
     'Loop Through Controls On Userform
    For Each ctlLoop In Me.Controls
         'Check If Control Is A Textbox
        If TypeOf ctlLoop Is MSForms.TextBox Then
             'Create A New Instance Of The Event Handler CLass
            Set clsObject = New clsObjHandler
             'Set The New Instance To Handle The Events Of Our Textbox
            Set clsObject.tbxCustom1 = ctlLoop
             'Add The Event Handler To Our Collection
            colTbxs.Add clsObject
        End If
    Next ctlLoop
End Sub
Private Sub UserForm_Terminate()
     'Destroy The Collection To Free Memory
    Set colTbxs = Nothing
End Sub

Saludos.DAM

Si es lo que necesitas.

Me faltó un detalle, En tu formulario copia este código

Dim colTbxs As Collection 'Collection Of Custom Textboxes
Private Sub UserForm_Initialize()
    Dim ctlLoop As MSForms.Control
    Dim clsObject As clase1
     'Create New Collection To Store Custom Textboxes
    Set colTbxs = New Collection
     'Loop Through Controls On Userform
    For Each ctlLoop In Me.Controls
         'Check If Control Is A Textbox
        If TypeOf ctlLoop Is MSForms.TextBox Then
             'Create A New Instance Of The Event Handler CLass
            Set clsObject = New clase1
             'Set The New Instance To Handle The Events Of Our Textbox
            Set clsObject.tbxCustom1 = ctlLoop
             'Add The Event Handler To Our Collection
            colTbxs.Add clsObject
        End If
    Next ctlLoop
End Sub
Private Sub UserForm_Terminate()
     'Destroy The Collection To Free Memory
    Set colTbxs = Nothing
End Sub

Saludos.DAM
No olvides finalizar la pregunta.

Hola.!! Desde ya gracias por responder.

Ahora, copie tal cual me indicaste el código y no funciona, tira un error:

" No se ha definido el tipo definido por el usuario."

Agradezco tu colaboración.

Slds.

Te anexo mi archivo para que veas cómo deben quedar.

https://www.dropbox.com/s/drfop8nfoynmrdo/frm%20nums%20textbox.xlsm

Saludos. DAM
No olvides finalizar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas