MACRO-EXCEL: Buscar palabra en 2 hojas

Un usuario de aquí me ayudado a resolver un error en mi cód. Pero ahora me ha surgido otra dificultad, explico: la idea es que busque una palabra ingresada en el listbox y que yo pueda seleccionar la hoja mediante un combobox, pero resulta que si no estoy posicionada en la hoja donde se encuentra la palabra no muestra nada, es decir que debo estar en esa hoja para que muestre el contenido.

el cód. Que tengo es:

Private Sub CommandButton1_Click()
Dim HOJAX
s = TextBox1.Value
HOJAX = ComboBox1.Value
ListBox1.ColumnCount = 4
ListBox1.ColumnWidths = "100pt;100pt;100pt;150pt"
ListBox1.Clear
If Sheets(HOJAX).Range("A:f").Find(s) Is Nothing Then
TextBox1.Text = ""
MsgBox "No se encontraron los datos buscados", 16, "Datos No Encontrados"
Else
With Sheets(HOJAX).Range("A:f")
Set c = .Find(s)
primera = c.Address
fila = c.Row
columna = c.Column
Do
ListBox1.AddItem Cells(fila, columna - (columna - 1))
ListBox1.List(ListBox1.ListCount - 1, 1) = Cells(fila, (columna - (columna - 1)) + 1)
ListBox1.List(ListBox1.ListCount - 1, 2) = Cells(fila, (columna - (columna - 1)) + 2)
ListBox1.List(ListBox1.ListCount - 1, 3) = Cells(fila, (columna - (columna - 1)) + 3)
ListBox1.List(ListBox1.ListCount - 1, 4) = Cells(fila, (columna - (columna - 1)) + 4)
ListBox1.List(ListBox1.ListCount - 1, 5) = fila
Set c = .FindNext(c)
fila = c.Row
columna = c.Column
Loop While c.Address <> primera
End With
End If
End Sub

Private Sub ListBox1_Click()
Sheets(HOJAX).Select
fila = ListBox1.List(ListBox1.ListIndex, 5)
Cells(fila, "e").Active
On Error Resume Next
sLink = ActiveCell.Hyperlinks(1).Address
num = Err.Number
des = Err.Description
On Error GoTo 0
If num = 0 Then
ActiveCell.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
Else
MsgBox "No hay archivo cargado"
End If

End Sub

Private Sub UserForm_Initialize()
With Me.ComboBox1
.AddItem "Hoja2"
.AddItem "Hoja3"
End With
End Sub

Alguien podría ayudarme

Respuesta

Te muestro un ejemplo de como lo hago yo, primero la macro carga en el combobox las hojas que esten presentes en el libro, luego en cuanto tu tecles algo en el textbox si no has elegido hoja entonces cargara los datos de la hoja que este activa, en caso contrario cargara los datos de la hoja que selecciones del combobox, y hara un filtro por cualquier (en este caso) del nombre que coincida puede ser nombres o apellidos y los mostrara en el listbox

 

Cabe mencionar que esta macro es un ejemplo, tendrias que adaptarla a tus necesitades o bien subir un pantalla de tus datos para ver como adaptarla.

Option Base 1
Private Sub ComboBox1_Change()
HOJA = ComboBox1.Value
Sheets(HOJA).Select 'SE PUEDE ELIMINAR
End Sub
Private Sub TextBox1_Change()
HOJA = ComboBox1.Value
PALABRA = TextBox1.Text
If HOJA <> Empty Then
    Set h = Sheets(HOJA).Range("B2").CurrentRegion
Else
    Set h = ActiveSheet.Range("B2").CurrentRegion
End If
With h
    FILAS = .Rows.Count
    .AutoFilter
    .AutoFilter FIELD:=1, Criteria1:="*" & PALABRA & "*"
    cuenta = WorksheetFunction.Subtotal(102, h.Columns(2))
    If cuenta = 0 Then ListBox1.Clear: GoTo salir
    ReDim MATRIZ(cuenta, 5)
    X = 1
    For i = 2 To FILAS
        OCULTA = .Rows(i).Hidden = False
        If OCULTA Then
            MATRIZ(X, 1) = .Cells(i, 1)
            MATRIZ(X, 2) = .Cells(i, 2)
            MATRIZ(X, 3) = .Cells(i, 3)
            MATRIZ(X, 4) = .Cells(i, 4)
            X = X + 1
        End If
    Next i
    With ListBox1
        .List = MATRIZ
        .ColumnCount = h.Columns.Count
    End With
End With
salir:
Set h = Nothing
End Sub
Private Sub UserForm_Initialize()
For Each HOJA In Sheets
NOMBRE = HOJA.Name
ComboBox1.AddItem NOMBRE
Next HOJA
End Sub

2 respuestas más de otros expertos

Respuesta

Para seleccionar una hoja en un ComboBox puede usar el ejemplo de este código, actualiza el nombre de su hoja o hojas a buscar, puede agregar tantas hojas donde necesite buscar

    If ComboBox1.Text = "Hoja1" Then
        Hoja1.Select
    ElseIf ComboBox1.Text = "Hoja2" Then
        Hoja2.Select
    End If
Respuesta

En esta parte

ListBox1. AddItem Cells(fila, columna - (columna - 1))

Te faltó hacer referencia a la hoja, solamente falta el punto:

ListBox1. AddItem .Cells(fila, columna - (columna - 1))


Hice algunos ajustes a tu código. Eliminé el uso de algunas variables que no es necesario. También ajusté el evento click del Listbox, para que no sea necesario seleccionar la hoja.

Private Sub CommandButton1_Click()
  Dim r As Range, c As Range, primera As String
  If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
    MsgBox "Selecciona una hoja"
    ComboBox1.SetFocus
    Exit Sub
  End If
  ListBox1.Clear
  With Sheets(ComboBox1.Value)
    Set r = .Range("A:f")
    Set c = r.Find(TextBox1.Value, , xlValues, xlPart)
    If c Is Nothing Then
      TextBox1.Text = ""
      MsgBox "No se encontraron los datos buscados", 16, "Datos No Encontrados"
    Else
      primera = c.Address
      Do
        ListBox1. AddItem .Cells(c.Row, c.Column - (c.Column - 1))
        ListBox1. List(ListBox1.ListCount - 1, 1) = . Cells(c.Row, (c.Column - (c.Column - 1)) + 1)
        ListBox1. List(ListBox1.ListCount - 1, 2) = . Cells(c.Row, (c.Column - (c.Column - 1)) + 2)
        ListBox1. List(ListBox1.ListCount - 1, 3) = . Cells(c.Row, (c.Column - (c.Column - 1)) + 3)
        ListBox1. List(ListBox1.ListCount - 1, 4) = . Cells(c.Row, (c.Column - (c.Column - 1)) + 4)
        ListBox1.List(ListBox1.ListCount - 1, 5) = c.Row
        Set c = r.FindNext(c)
      Loop While Not c Is Nothing And c.Address <> primera
    End If
  End With
End Sub
Private Sub ListBox1_Click()
  Dim fila As Long, sLink As Variant, num As Variant, des As String
  If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
    MsgBox "Selecciona una hoja"
    ComboBox1.SetFocus
    Exit Sub
  End If
  With Sheets(ComboBox1.Value)
    fila = ListBox1.List(ListBox1.ListIndex, 5)
    On Error Resume Next
    sLink = .Cells(fila, "E").Hyperlinks(1).Address
    num = Err.Number
    des = Err.Description
    On Error GoTo 0
    If num = 0 Then
      .Cells(fila, "E").Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
    Else
      MsgBox "No hay archivo cargado"
    End If
  End With
End Sub
Private Sub UserForm_Initialize()
  With Me.ComboBox1
    .AddItem "Hoja2"
    .AddItem "Hoja3"
  End With
  ListBox1.ColumnCount = 4
  ListBox1.ColumnWidths = "100pt;100pt;100pt;150pt"
End Sub

Déjame saber si tienes alguna duda.

¡Gracias! con este cód. voy a poder seleccionar la hoja donde buscar?

Sí. Tienes que seleccionar la hoja en el combobox.

Avísame cualquier duda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas