Activar la celda del ítem seleccionado en listbox

Tengo una listbox1 con una lista cargada por rowsource. Quiero que al seleccionar en esa listbox un ítem se active la celda en el libro que tiene ese dato dentro de la lista cargada.

Respuesta
1

.

Hola! Eva. Intenta por ejemplo con:

Private Sub ListBox1_Click()
With ListBox1
  Application.Goto Range(.RowSource).Resize(1).Offset(.ListIndex)
End With
End Sub

¿Te sirve la idea?...
Saludos, Mario (Cacho) R.

:)

Hola Mario, no me sirve , me da error 1004 "range de objeto global"

:)

Hay que ver que tienes en el RowSource...
Por ejemplo inmediatamente antes del Application.Goto pon esto otro:

MsgBox .RowSource & vbLf & .ListIndex

Comenta por favor que te informa el MsgBox, ¿Sí?...

:)

Mario disculpa el error fue mio, tu método si sirve cuando la listbox muestra datos de una rowsource. En mi caso, corrijo, los datos se cargan a la listbox luego de presionar un botón (boton3) que realiza una búsqueda en la fila 2. te copio mi código...

Private Sub CommandButton3_Click()
'
'BUSQUEDA INTELIGENTE
'
numerodedatos = Hoja10.Range("B" & Rows.Count).End(xlUp).Row
Hoja10.AutoFilterMode = False
Me.ListBox4 = Clear
Me.ListBox4.RowSource = Clear
X = 0
'
'EL N° DE FILA DICE DONDE COMIENZAN LOS DATOS DE LA HOJA
'
For fila = 3 To numerodedatos
'
'EL N° DE FILA DICE DONDE BUSCA EN CADA COLUMNA
'
COL1 = Hoja10.Cells(fila, 2).Value
'----------------------------------------------------------------------------------
If UCase(COL1) Like "*" & UCase(Me.TextBox1.Value) & "*" Then
Me.ListBox4.AddItem
Me.ListBox4.List(X, 0) = Hoja10.Cells(fila, 4).Value
X = X + 1
'----------------------------------------------------------------------------------
End If
Next
End Sub

:)

Entonces

:)

:)

Reemplaza TODALMENTE los códigos de CommandButton3_Click y ListBox4_Click por los que aquí te muestro:

Private Sub CommandButton3_Click()
Dim C As Range, mWidth
mWidth = Array(70, 0)
With ListBox4
  .Clear
  .ColumnCount = 2
  .ColumnWidths = Join(mWidth, ";")
  .IntegralHeight = True
  DoEvents
  .Width = 15 + Application.Sum(mWidth)
End With
With Hoja10
  .AutoFilterMode = False
  For Each C In .Range("B3", .Cells(.Rows.Count, "B").End(xlUp))
    If UCase(C) Like "*" & UCase(TextBox1) & "*" Then
      ListBox4.AddItem C.Offset(, 2).Value
      ListBox4.List(ListBox4.ListCount - 1, 1) = C.Row
    End If
  Next
End With
End Sub
Private Sub ListBox4_Click()
With ListBox4
  If .ListIndex = -1 Then Exit Sub
  Application.Goto Hoja10.Cells(.List(.ListIndex, 1), "D")
End With
End Sub

¿Ahora sí?...

:)

2 respuestas más de otros expertos

Respuesta
1

Este es el resultado de la macro, como no aportas muchos datos asumo que solo quieres los datos de una columna en especifico, en este ejemplo selecciono en el listbox una película y me envía a la celda donde se encuentra esta

y esta es la macro, en este caso el 2 representa la fila y columna donde empiezan mis datos, columna B, fila 2 solo fíjate donde comienzan tus datos y cambia las coordenadas.

Private Sub ListBox1_Click()
fila = ListBox1.ListIndex + 2
Cells(fila, 2).Select
End Sub
Private Sub UserForm_Initialize()
ListBox1.RowSource = "b2:b754"
End Sub

hola James el asunto es que los datos de mi listbox no se agregan con rowsource. tengo un textbox1 donde el dato escrito es buscado en (Hoja10.Range("B") (columna2) luego de presionar el boton3 se agregan a la listbox los items de la columna ("D") (columna4)  de esa ruta que contenga el dato buscado. te copio mi codigo....

Private Sub CommandButton3_Click()
'
'BUSQUEDA INTELIGENTE
'
numerodedatos = Hoja10.Range("B" & Rows.Count).End(xlUp).Row
Hoja10.AutoFilterMode = False
Me.ListBox4 = Clear
Me.ListBox4.RowSource = Clear
X = 0
'
'EL N° DE FILA DICE DONDE COMIENZAN LOS DATOS DE LA HOJA
'
For fila = 3 To numerodedatos
'
'EL N° DE FILA DICE DONDE BUSCA EN CADA COLUMNA
'
COL1 = Hoja10.Cells(fila, 2).Value '***busca en fila 2 pero...
'----------------------------------------------------------------------------------
If UCase(COL1) Like "*" & UCase(Me.TextBox1.Value) & "*" Then
Me.ListBox4.AddItem
Me.ListBox4.List(X, 0) = Hoja10.Cells(fila, 4).Value '***muestra lo que este en fila 4
X = X + 1
'----------------------------------------------------------------------------------
End If
Next
End Sub

Dejame te explico lo que hace este version del buscador,

1.- Recorre las filas de la columna B y busca si parte del contenido contiene o es parecido a lo que hay en el textbox1 y lo añade al listbox y aqui esta el detalla, vamos a suponer que el resultado esta en la celda b2 o cells(2,2), tu con la instruccion que tienes abajo le estas diciendo que en caso de encontrar coincidencias cargue en el listbox el contenido de la columna 4 y no de la dos, recuerda esto el valor celda representa la fila y el valor numero o sea 4 representa las columnas.

Me.ListBox4.List(X, 0) = Hoja10.Cells(fila, 4).Value '***muestra lo que este en fila 4

solo cambia a que quede asi

Me.ListBox4.List(X, 0) = Hoja10.Cells(fila, 2).Value '***muestra lo que este en fila 4

y por cierto no tiene sentido tener un buscador si usas un button command, yo hice un buscador parecido al tuyo solo que conforme tecleo va filtrando en tiempo real los datos.

por cierto este el resultado de tu macro ya con la linea modificada

Si James estoy consciente de que los datos que se agregan a la listbox son los de la columna 4 (es a propósito) no quiero que se muestren los datos de la columna 2, solo me interesa la columna 2 para buscar, para mostrar en el listbox me interesan los de la columna 4.

***Ahora lo que necesito es que al seleccionar cualquier ítem (agregado previamente al listbox con el buscador en el botón 3) se active esa celda (en la columna 4) en el workbook.*** 

jejeje si el buscador es precisamente una adaptación que hice de un formulario que funciona igual al de tu screenprint. 

Entonces añade estoa a tu formulario, te sleccionara la fila correspondiente al item que escojas en el listbox, si solo quieres la celda quita de la ultima columna el a:d y dejala en d:d

Private Sub ListBox4_Change()
valor = ListBox4.Value
fila = WorksheetFunction.Match(valor, Range("d:d"), 0)
Range("a:d").Rows(fila).Select
End Sub

Si tienes datos repetidos la programación es otra, esta solo te sirve para datos no duplicados.

Respuesta
1

Este ejemplo modifica el stock de un producto al ser vendido el producto a vender está en el listbox y la modificación es sobre ese articulo de celda en Excel.

https://youtu.be/smL4A-aRjCM 

Aca tienes mas ejemplos con listbox

https://www.youtube.com/playlist?list=PLdK9H5dMIfQhCuim_Sw4MwbYx1Q5eqF9z

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas