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

1 respuesta

1
Respuesta de

Hola:

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, por favor, podrías finalizar la pregunta. Gracias

Que tal:

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. Gracias

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. Gracias

Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje
¿No es la respuesta que estabas buscando? Puedes explorar otras preguntas del tema Microsoft Excel o hacer tu propia pregunta: