Seleccionar linea al click en el botón

Tengo esta rutina que me funciona bien en evento click de un ListBox

Rem Para Marcar selecionada la linea del articulo selcionado en el ListBox
    Celda = lista.List(lista.ListIndex)
    Cells.Find(what:=Celda).Activate
    Range(Cells(Selection. Row, 1), Cells(Selection. Row, 7)).Select

Quiero que al ejecutar esta macro, haga lo mismo, seleccione la linea que recibio los datos

La meti en ciertos puntos de la macro pero no logre hacer que seleccione la linea

Private Sub cbtNueClien_Click()
    On Error Resume Next
    Dim fila As Integer
    Set ws = ActiveSheet
    If cboHojas.Value = "" Then
        MsgBox "NO HA SELECCIONADO HOJA"
        Exit Sub
    Else
'Viene de la Function valida(wtext As MSForms.Control, num)
    If MINCaracter(txtCod, "Cod/Producto", 10) = False Then Exit Sub ''AQUI 10 DIGITOS MINIMO
''''''''''''''
    If Application.CountIf(ActiveSheet.Range("B2:B50000"), txtProd.Value) Then 'Busca en la columna A si existe el contacto
Rem Si existe la rutina llega solo al If mensage. si no existe, brinca después de Else para insertar los datos.
        Mensage = MsgBox("El producto " & txtProd.Text & " ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
        txtProd.Text = "" 'Si te dá mensage, Limpia el TextBox
        If Mensage = vbOK Then Exit Sub 'Del mensage presionas OK y hasta el Exit Sub llega la rutina
    Else
''''
'Inserta datos de nuevo cliente
    With ws
       fila = .Range("A2:A25000").Find(txtCod, 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 If
    End If
    Buscar.Enabled = False
End Sub

1 respuesta

Respuesta
1

Cambia esto:

    If Application.CountIf(ActiveSheet.Range("B2:B50000"), txtProd.Value) Then 'Busca en la columna A si existe el contacto
Rem Si existe la rutina llega solo al If mensage. si no existe, brinca después de Else para insertar los datos.
        Mensage = MsgBox("El producto " & txtProd.Text & " ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
        txtProd.Text = "" 'Si te dá mensage, Limpia el TextBox
        If Mensage = vbOK Then Exit Sub 'Del mensage presionas OK y hasta el Exit Sub llega la rutina
    Else

Por esto:

    If Application.CountIf(ActiveSheet.Range("B2:B50000"), txtProd.Value) Then 'Busca en la columna A si existe el contacto
Rem Si existe la rutina llega solo al If mensage. si no existe, brinca después de Else para insertar los datos.
        Mensage = MsgBox("El producto " & txtProd.Text & " ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
        Columns("B").Find(what:=txtProd.Value).Activate
        Range(Cells(Selection.Row, 1), Cells(Selection.Row, 7)).Select
        txtProd.Text = "" 'Si te dá mensage, Limpia el TextBox
        If Mensage = vbOK Then Exit Sub 'Del mensage presionas OK y hasta el Exit Sub llega la rutina
    Else

[sal u dos

[

Hola Dante. Mis deseos para que estés bien, salud y animo

No resulta, no selecciona nada, ni celda ni línea

Pues cuanto a lo que me envías, ya lo había probado con la diferencia de la 1ª línea

        Cells.Find(what:=Celda).Activate
PROBE CON ESTA Y LA SIGUIENTE Y NO ME DABA        Columns("B").Find(what:=txtProd.Value).Activate
        Range(Cells(Selection.Row, 1), Cells(Selection.Row, 7)).Select

Claro que una hace referencia a celda y otra a columna

¿Y te aparece algún mensaje de error?

¿Qué tienes en txtProd letras o números? ¿Y qué tienes en la columna B letras o números?

También explícame lo que quieres lograr, es decir, si encuentra el dato txtProd en la columna B, ¿entonces debe seleccionar la fila donde lo encontró? ¿Eso es lo que quieres?

No hay error, solo se ejecuta la macro sin marcar la linea

Al ejecutar la macro, entran los nuevos datos; todo funciona de maravillas.

Quiero adicionar a esta macro, algo que al ejecutarla, ingressa los nuevos datos, pero que tambien me seleccione la linea (1 a 7) en que caeron esos datos

La macro es la que esta arriba del evento

Private Sub cbtNueClien_Click()

Ya no entiendo.

Aclara, ¿en cuál macro quieres los cambios?

¿Y qué resultado esperas?

En esta macro

Private Sub cbtNueClien_Click()
    On Error Resume Next
    Dim fila As Integer
    Set ws = ActiveSheet
    If cboHojas.Value = "" Then
        MsgBox "NO HA SELECCIONADO HOJA"
        Exit Sub
    Else
'Viene de la Function valida(wtext As MSForms.Control, num)
    If MINCaracter(txtCod, "Cod/Producto", 10) = False Then Exit Sub ''AQUI 10 DIGITOS MINIMO
''''''''''''''
    If Application.CountIf(ActiveSheet.Range("B2:B50000"), txtProd.Value) Then 'Busca en la columna A si existe el contacto
Rem Si existe la rutina llega solo al If mensage. si no existe, brinca después de Else para insertar los datos.
        Mensage = MsgBox("El producto " & txtProd.Text & " ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
        txtProd.Text = "" 'Si te dá mensage, Limpia el TextBox
        If Mensage = vbOK Then Exit Sub 'Del mensage presionas OK y hasta el Exit Sub llega la rutina
    Else
''''
'Inserta datos de nuevo cliente
    With ws
       fila = .Range("A2:A25000").Find(txtCod, 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 If
    End If
    Buscar.Enabled = False
End Sub

Para que seguido a la ejecucion, me presente la linea que recibio los datos, se vea seleccionada

Quiero que la línea CCCCCCCCCCCCCCCC aparezca seleccionada

Prueba así:

Private Sub cbtNueClien_Click()
    On Error Resume Next
    Dim fila As Integer
    Set ws = ActiveSheet
    If cboHojas.Value = "" Then
        MsgBox "NO HA SELECCIONADO HOJA"
        Exit Sub
    Else
'Viene de la Function valida(wtext As MSForms.Control, num)
    If MINCaracter(txtCod, "Cod/Producto", 10) = False Then Exit Sub ''AQUI 10 DIGITOS MINIMO
''''''''''''''
    If Application.CountIf(ActiveSheet.Range("B2:B50000"), txtProd.Value) Then 'Busca en la columna A si existe el contacto
Rem Si existe la rutina llega solo al If mensage. si no existe, brinca después de Else para insertar los datos.
        Mensage = MsgBox("El producto " & txtProd.Text & " ya existe." & vbCrLf & vbCrLf & _
                "Puede escribir nuevo nombre y seguir, o en otro proceso editar datos", vbInformation + vbOKOnly, "CONTACTO EXISTENTE")
        txtProd.Text = "" 'Si te dá mensage, Limpia el TextBox
        If Mensage = vbOK Then Exit Sub 'Del mensage presionas OK y hasta el Exit Sub llega la rutina
    Else
''''
'Inserta datos de nuevo cliente
    With ws
       fila = .Range("A2:A25000").Find(txtCod, lookat:=xlWhole).Row
       If Err.Number = 91 Then
          fila = .Range("b" & .Rows.Count).End(xlUp)(2).Row
          Call ingresar_datos(fila)
'Busca el txtprod
          columns("B").find(txtprod.value).activate
          range(cells(slection.row, 1), cells(selection.row, 7)).select
          Exit Sub
       End If
       Call ingresar_datos(fila)
          columns("B").find(txtprod.value).activate
          range(cells(slection.row, 1), cells(selection.row, 7)).select
    End With
    End If
    End If
    Buscar.Enabled = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas