Para Dam = Unir 2 eventos de 2 controles en solo un evento para los 2 controles

Hola Dam.

Quiero lograr esto, 2 eventos similares solo con el nombre del cotrol diferente.

Uno es txtTelf1 y otro txtTelf2.

Quise hacer algo parecido pero no logro que se ejecute bien. Esta funciona al 1000% perfecto para lo que fue y es destinada.

Sub Seleccionar_Linea()   On Error Resume Next     nombrecombo = MPAG.cmbEdProd.List(MPAG.cmbEdProd.ListIndex)     nombrecombo = MPAG.cmbEdProv.List(MPAG.cmbEdProv.ListIndex) 'activa la celda A2 (de la hoja activa)Range("a2").Activate'declara una variable que contendrá las celdas de la región actualSet Rango = Range("A1").CurrentRegion'guarda en la variable 'Valor' el dato seleccionado de la lista'listindex indica el nro de índice del elemento seleccionadovalor = nombrecombo'busca ese valor en el rango y si lo encuentra lo seleccionaRango.Find(What:=valor, LookAt:=xlWhole, After:=ActiveCell).Activate 'Busca la linea, el valor seleccionado en el CombnoUltCol = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column'Range("A" & ActiveCell.Row & ":i" & ActiveCell.Row).Select 'Selecciona linea de la celda seleccionadaRange(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, UltCol)).SelectEnd Sub

y estas 2 son los eventos que trate de unirlas con un parecido pero, me quede aquen de lo igual y funcional.

Private Sub txtTelf1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
KeyAscii = 0 '<-- Esta linea borrar la tecla presionada equivocadamente
MsgBox "Ingrese SOLO numeros, en el campo", vbOKOnly + vbInformation, Title:="CARACTER NULO"
End If
'Para Guion
Select Case Len(txtTelf1)
Case 4
txtTelf1.Text = txtTelf1.Text & "-"
End Select
If Len(txtTelf1) = 12 Then KeyAscii = 0: MsgBox "LLego al maximo de 12 caracteres": Exit Sub
End Sub
Private Sub txtTelf2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
KeyAscii = 0 '<-- Esta linea es para borrar la tecla presionada equivocadamente
MsgBox "Ingrese SOLO numeros, en el campo", vbOKOnly + vbInformation, Title:="CARACTER NULO"
End If
'Para Guion
Select Case Len(txtTelf2)
Case 4
txtTelf2.Text = txtTelf2.Text & "-"
End Select
If Len(txtTelf2) = 12 Then KeyAscii = 0: MsgBox "LLego al maximo de 12 caracteres": Exit Sub
End Sub

Como ves, idénticas con nombre del control diferente y igual función.

Felices fiestas con un 2015 lleno de prosperidad, salud y suerte

Gracias amigo

1 respuesta

Respuesta
1

El máximo de caracteres en un texbox lo puedes definir en las propiedades del textbox.

Sé que no es lo que preguntaste, pero igual te ayuda para que no valides directamente en la captura.


Para esto , tendría que revisarlo con tu archivo y un ejemplo:

Sub Seleccionar_Linea()
    On Error Resume Next
    nombrecombo = MPAG.cmbEdProd.List(MPAG.cmbEdProd.ListIndex)
    nombrecombo = MPAG.cmbEdProv.List(MPAG.cmbEdProv.ListIndex)
    'activa la celda A2 (de la hoja activa)
    Range("a2").Activate
    'declara una variable que contendrá las celdas de la región actual
    Set Rango = Range("A1").CurrentRegion
    'guarda en la variable
    'Valor' el dato seleccionado de la lista
    'listindex indica el nro de índice del elemento seleccionado
    valor = nombrecombo
    'busca ese valor en el rango y si lo encuentra lo selecciona
    Rango.Find(What:=valor, LookAt:=xlWhole, After:=ActiveCell).Activate
    'Busca la linea, el valor seleccionado en el Combno
    UltCol = Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column '
    Range("A" & ActiveCell.Row & ":i" & ActiveCell.Row).Select
    'Selecciona linea de la celda seleccionada
    Range(Cells(ActiveCell. Row, 1), Cells(ActiveCell. Row, UltCol)).Select
End Sub

Si me dices para enviártelo, pues lo haré.

Esa misma macro la tengo en uso. Quise hacer algo parecido para estos 2 controles (eventos Keypress) pero no logre aunque cambiando nombre de los controles

Estas 2 keypress quisiera unirlas en una sola para los 2 controles con el mismo evento

Lo que tienes en tu código keypress es una validación de teclas y del guión y lo que tienes en el procedimiento "seleccionar_linea" es otra cosa muy diferente, no veo cuál es la relación.

Puedes poner los 2 eventos keypress en una clase, como la que te envié para validar sólo números.

Esto va en el formulario:

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 ctlLoop.Name <> "TextBox3" Then
        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
        End If
    Next ctlLoop
End Sub
Private Sub UserForm_Terminate()
     'Destroy The Collection To Free Memory
    Set colTbxs = Nothing
End Sub

Y esto va en una clase "Clase1"

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 múltiple 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
    'If KeyAscii <> 46 And (KeyAscii < 48 Or KeyAscii > 57) Then
    '    KeyAscii = 0
    'End If
    'Select Case KeyAscii
    'Case 46, 48 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

Pero se me hace más código, crear una clase , que para 2 keypress que quieres unir.

Pero ahí tienes las macro para que puedas adaptarlas a tus textbox

Hola Dam.

Claro, te entiendo y como sabes que me gusta el poco código para hacer mucho, jejejejeej voy a quedarme con el que me dejas, compararlo con el que tengo para los ComboBox, (que es igual o similar) y decidiré cual me interesa mas para pesa menos jeejeej.

Gracias amigo, te estaré agradecido tu generosidad.

Con gusto amigo, seguimos en contacto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas