Integrara a macro rutina para que me seleccione línea

A 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

quiero integrarle rutina para cuando piso el boton ingresar nuevos datos, la line adonde caigan los datos me quede selecionada desde 1 a 7 = A hasta G.

Un ejemplo

1 respuesta

Respuesta
1

[Hola

Si mal no te entendí y si mal no me equivoco, esto te ayudará:

Range("A" & fila & ":" & "G" & fila).Select

Comentas

Abraham Valencia

Hola Abraham, gracias por tu interés en darnos tu ayuda.

Funciona pero con un detalle, selecciona como quiero, pero la ultima línea,

No la línea donde se encuentran los datos ingresados

La línea seleccionada son los datos ingresados con la ejecución del botón ingresar nuevos datos.

Como se ve, selecciona la ultima LÍNEA.

Quiero decirte que si hago la incercion de datos en otra hoja con muchos más datos, siempre la ultima con datos es la que selecciona

Decirte que coloque tu linea en este punto

  If Err.Number = 91 Then
          fila = .Range("b" & .Rows.Count).End(xlUp)(2).Row
          Call ingresar_datos(fila)
          Range("A" & fila & ":" & "G" & fila).Select
          Exit Sub
       End If
       Call ingresar_datos(fila)
       Range("A" & fila & ":" & "G" & fila).Select
    End With
    End If

Si mal no te entendí y si mal no me equivoco" ya que no has mostrado tu macro "ingresar_datos" y quizá ahí está el cambio. Si no terminas de entender para adaptar lo que envié sugiero que coloques tu archivo en un "Drive" y compartas por aquí el enlace.

Abraham Valencia

Estas son las macros que hacen parte del boton Ingresar nuevo. Preparo la plantilla y t la subo

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
-----------------------------------------------------------------------------
'Inserta y luego ordena alfabeticamente de B hasta G tomando columna B
Sub ingresar_datos(fila As Integer, Optional OrdenarPor As String = "B") 'Ordena por la columna B
    Set ws = ActiveSheet
    Application.ScreenUpdating = False
    With ws
        .Cells(fila, 1) = txtCod
        .Cells(fila, 2) = txtProd
        .Cells(fila, 3) = txtProve
        .Cells(fila, 4) = txtFactu
        .Cells(fila, 5) = Format(DTPicker1, "mm/dd/yyyy") 'DTPicker1 en ves de txtFFact
'        .Cells(fila, 5) = NumberFormat = "dd/mm/yyyy" 'dar formato a la celda
        .Cells(fila, 6) = CDbl(txtUbic.Value)
        .Cells(fila, 7) = txtObser
        .Range("A2:G" & fila).Sort key1:=.Range(OrdenarPor & fila)
    End With
    Application.ScreenUpdating = True
'limpiar controles
    Call Limpar(Me)
'carga ListBox
    Call BuscaCambio
    Call actualizar_lista
    Call contador(Me)
    Range("A2").Select
    txtCod.SetFocus
End Sub

Para bajar la plantilla

Otro enlace

El botón es el 1º de la derecha del formulario

Después de seleccionar la hoja en el combo de la izquierda, se llena el ListBox. Al hacer click en alguno línea del List se selecciona la línea que selecciono en el List.

Después de llenos con datos todos los cuadros de texto (izquierda) presiono el 1º botón (a la derecha del form) y entran todos los datos que existían en las cajas de texto, en ese mismo tiempo quiero que se seleccone la línea donde caeron los datos.

Veras en la macro rutina para ordenar los datos, tal vez por eso es que cae en la ultima

Línea y no en la que corresponde a los datos recen ingresados

[Hola

Pues sí, tal y como ya adelantas el dilema es que "ordenas" los dato y como la selección era en base a la variable "fila" pues se "pierde".

Para mantener tu idea la opción es que después de tu "Sort" un "Find" ubique el dato que se ha ingresado/actualizado y seleccione las celdas correspondientes. No he podido ver tu archivo ya que un enlace me da error y en el siguiente mi antivirus bloquea la descarga, entonces no sé si hay datos únicos o no ya que de ser "no" la respuesta la cosa se complica. De ser únicos basta mantener el valor en una variable pública y usar "find" (no sé si sabes como trabaja)

Abraham Valencia

son aqui las 5-15 am, voy saliendo al trabajo, al llegar taso de subir a otra web

Hola Abraham. Llego y encuentro que mi maquina no quier nada, estoy desde un sayber. y voy arregaalr mi asunto de mi maquina. al poder conetarme con ella subo la plantilla a otra WEB

Nuevo enlace para bajar la plantilla

Aqui enlace

Otro

Lo siento estimado, sigue bloqueado.

Abraham Valencia

De todos modos estas son las 2 macros que se ejecutan y como se puede apreciar, contiene rutina para el ordenamiento de los datos

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

La macro que se refiere el Call ingresar_datos(fila)

'Inserta y luego ordena alfabeticamente de B hasta G tomando columna B
Sub ingresar_datos(fila As Integer, Optional OrdenarPor As String = "B") 'Ordena por la columna B
    Set ws = ActiveSheet
    Application.ScreenUpdating = False
    With ws
        .Cells(fila, 1) = txtCod
        .Cells(fila, 2) = txtProd
        .Cells(fila, 3) = txtProve
        .Cells(fila, 4) = txtFactu
        .Cells(fila, 5) = Format(DTPicker1, "mm/dd/yyyy") 'DTPicker1 en ves de txtFFact
'        .Cells(fila, 5) = NumberFormat = "dd/mm/yyyy" 'dar formato a la celda
        .Cells(fila, 6) = CDbl(txtUbic.Value)
        .Cells(fila, 7) = txtObser
        .Range("A2:G" & fila).Sort key1:=.Range(OrdenarPor & fila)
    End With
    Application.ScreenUpdating = True
'limpiar controles
    Call Limpar(Me)
'carga ListBox
    Call BuscaCambio
    Call actualizar_lista
    Call contador(Me)
    Range("A2").Select
    txtCod.SetFocus
End Sub

[Hola

Declara en un módulo "standard"  una variable pública:

Public ValorBuscado As String

Ahora, voy a suponer que los datos de la columna "A" son únicos y por ende los del "txtCod", entonces agrega esto:

    Else
''''
ValorBuscado = txtCod
'Inserta datos de nuevo cliente
    With ws

Luego agrega esto:

 End If
    End If
Busca2 = ws.Range("A2:A25000").Find(txtCod, lookat:=xlWhole).address
Range(Busca2).Select
    Buscar.Enabled = False

Y borra esta línea:

 Range("A2").Select

Debería resultar.

Abraham Valencia

Gracias Abraham.por ahí voy

Nos vas contando.

Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas