Una sola macro Excel para 2 o más TextBox

Nuevamente con una solicitud. Esto para que pueda tener la macro, llamarla con Call para 2 o más TextBox

Sub Min_Max_Caracteres()
 'obliga a que tenga Minimo-Max la cantidad de 12 caracteres
     If Len(txtTelf1.Text) <> 12 Then
        MsgBox "Telefono 1 No tiene 12 dígitos", 64, ""
        txtTelf1.SetFocus
     Exit Sub
     End If
    If Len(txtTelf2.Text) <> 12 Then
        MsgBox "Telefono 2 No tiene 12 dígitos", 64, ""
        txtTelf2.SetFocus
    Exit Sub
    End If
End Sub

Quisiera poder usarla en los 3 formularios del libro llamándola, en los 3 Form, no solo en uno ni un solo evento.

Los TextBox no tiene todos los mismos nombres como es obvio, un ejemplo es este, txtmoc60 y otros pero todos se tratan de la misma cantidad de caracteres porque se trata de # de teléfono.

¿Será posible? O tiene que ser una macro por formulario, ¿esto por los nombres de los TextBox?

1 Respuesta

Respuesta
1

H o l a:

No entiendo esto que pones:

"no solo en uno ni un solo evento"

Tiene que ocurrir un evento en el textbox para que se ejecute una macro.

Podrías ser más claro con la petición, de esa forma podría buscar una solución.

Esta rutina que es para 2 cuadros de texto, reducirla a una sola rutina para los 2 Cuadros de texto o más, según yo necesite If Len(txtTelf1.Text) or Len(txtTelf2.Text) <> 12 Then

 'obliga a que tenga Minimo-Max la cantidad de 12 caracteres
     If Len(txtTelf1.Text) <> 12 Then
        MsgBox "Telefono 1 No tiene 12 dígitos", 64, ""
        txtTelf1.SetFocus
     Exit Sub
     End If
    If Len(txtTelf2.Text) <> 12 Then
        MsgBox "Telefono 2 No tiene 12 dígitos", 64, ""
        txtTelf2.SetFocus
    Exit Sub
    End If

dentro del evento del boton

Private Sub cbtNueClien_Click()
    On Error Resume Next
    Dim fila As Integer
 'obliga a que tenga la cantidad de 12 caracteres
     If Len(txtTelf1.Text) <> 12 Then
        MsgBox "Telefono 1 No tiene 12 dígitos", 64, "Aviso"
        txtTelf1.SetFocus
     Exit Sub
     End If
    If Len(txtTelf2.Text) <> 12 Then
        MsgBox "Telefono 2 No tiene 12 dígitos", 64, "Aviso"
        txtTelf2.SetFocus
    Exit Sub
    End If
''''
    With Sheets("CLIENTES")
       fila = .Range("b5:b50000").Find(txtRIF, LookAt:=xlWhole).Row
       If Err.Number = 91 Then
          fila = .Range("b" & .Rows.Count).End(xlUp)(2).Row
          Call ingresar_datos(fila)
          Exit Sub
       End If
       Call ingresar_datos(fila)
    End With
End Sub

Existe una rutina que no te deja meter mas de x caracteres en un TextBox, esta en el form Busca_Clientes, te obliga a meterle x cantidad de caracteres (12), en los TextBox "txtTelf1 y 2"si no el evento no sigue, cortandose en el 1º o 2º Exit Sub segun sea el caso

Si introduces 11 caracteres te manda aviso que tienen que ser 12. Como es un numero telefonico, obligatoriamente tiene que ser 12 caracteres (aqui Venezuela) y para no haber error en introduicir el número maior o menor, esa rutina dentro del evento.

Como en ese formulario son 2 los TextBox ""txtTelf1 y 2", tengo 2 rutinas y si puede hacerse una sola para los 2 "txtTelf1 y 2" mejor, de forma que yo mismo puede modificar la cantidad de Cuadros de texto, de 2 a 3 o 5, dentro de la rutina por si necesito en otro evento de formulario

¿Entonces el evento está en presionar un botón?

Si, en el evento

Private Sub cbtNueClien_Click()

 del form BuscaClientes

Hice esto para los 2 textBox

     If Len(txtTelf1.Text) <> 12 Or Len(txtTelf2.Text) <> 12 Then
        MsgBox "Telefono 1 No tiene 12 dígitos", 64, "Aviso"
        txtTelf1.SetFocus
     Exit Sub
     End If

En el evento del botón que referí arriba.

Al probarlo no se como saber si funciona o no porque el mensaje esta dirigido al Teléfono 1 y si quiero saber si del txtTelf2 funciona o no no llego a saber.

¿Cómo colocar el MsgBox para que me diga si es el Teléfono 1 o Teléfono 2?

Realiza lo siguiente:

En cada botón de tu formulario pon lo siguiente:

Por ejemplo en el formulario 1:

Private Sub cbtNueClien_Click()
'Por.Dante Amor
    If valida(TextBox1, "1") = False Then Exit Sub
    If valida(TextBox2, "2") = False Then Exit Sub
    '
    'aquí continúa tu macro
End Sub

En el formulario 2:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If valida(txtTelf1, "1") = False Then Exit Sub
    If valida(txtTelf2, "2") = False Then Exit Sub
End Sub

Recuerda, son ejemplos, tu debes poner en cada formulario los nombres reales de tus commandbutton y de los nombres de los textbox.

No copies tal cual los códigos que te estoy enviando, porque no va a funcionar, tienes que cambiar los nombres reales de tus commandbutton y de tus textbox.


El número "1" y el "2" que estoy poniendo entre comillas es para que aparezca el mensaje:

"El telefono 1 No tiene 12 dígitos", pero tú debes cambiar el "1" y el "2" por lo que quieras que aparezca en el mensaje.


Ahora en un módulo pon lo siguiente:

Function valida(wtext As MSForms.Control, num)
'Por.Dante Amor
    'Valida contenido de un textbox
    If Len(wtext) <> 12 Then
        wtext.SetFocus
        MsgBox "El telefono " & num & " No tiene 12 dígitos", 64, ""
        valida = False
    Else
        valida = True
    End If
End Function

'S aludos. D a n t e   A m o r .

Hola Dante, muy buenas tardes. Solo ahora pude entrar, disculpa y

Como no podía dejar de ser, EXCELENTE, mi agradecimiento.

Entendido sobre los nombres de controles. Ya integre a 3 formularios y excelente ejecución

No te preocupes. Lo bueno es que estás bien.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas