MACRO- EXCEL: Busqueda de 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 que me pueda ayudar

2 Respuestas

Respuesta
1

Intente con el siguiente código al inicio, actualize el nombre de su hoja

Set M = Sheets("Hoja1")
Respuesta
1

Esto se puede resolver seleccionando o no la hoja.

Caso 1: Seleccionando la hoja que se elige desde el Combo

Private Sub CommandButton1_Click()
s = TextBox1.Value
Sheets(Combobox1.value).Select
ListBox1.ColumnCount = 4
'a partir de aquí sigue tu código 
'al que le quitarás toda mención a la HOJAX dejándola como ActiveSheet

Caso 2: Sin seleccionar la hoja.

Private Sub CommandButton1_Click()
Dim HOJAX
s = TextBox1.Value
Set HOJAX = Sheets(ComboBox1.Value)   'aquí se declara con SET
ListBox1.ColumnCount = 4
'continúan tus instrucciones

En este caso, que es el que se parece a tu código, debes anteponer la palabra HOJAX antes de cada mención a las celdas o rangos de esa hoja.

Por ejemplo:

If HOJAX.Range("A:f").Find(s) Is Nothing Then

También aquí:

With HOJAX.Range("A:f")

Pero en las instrucciones que se encuentran dentro de un bucle With ... End With debes anteponer solamente el punto. Por ejemplo aquí:

ListBox1.AddItem .Cells(fila, columna - (columna - 1))
'y así en todas las líneas que se encuentran antes del End With

En el otro evento (Listbox1.Click), tampoco necesitas seleccionar la hoja si declaras la variable Dim HojaX al inicio del módulo, y no dentro de la macro.

Private Sub ListBox1_Click()
    fila = ListBox1.List(ListBox1.ListIndex, 5)
    HOJAX. Cells(fila, "e"). Active

A partir del minuto 3 aprox. del video 11 de mi canal explico el uso de variables como nombres de hoja. Te invito a verlo si lo aclarado aquí te deja alguna duda aún.

Sdos.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas