Problema con una macro para realizar búsqueda

Hola, he estado intentando realizar el código para una macro la cual realice lo siguiente:
1.- Llame un archivo(.xls) ubicado en cierta ruta del equipo.
2.- Abrir el archivo y realizar una búsqueda en solo la columna B de un numero que yo ingrese.
3.- Si el valor es encontrado, seleccionar y copiar las siguientes 5 celdas a la derecha y copiarlas.
La intención es que buscando solo un numero (en este caso un folio) pueda pegar el contenido de las siguientes 5 celdas en un nuevo archivo de Excel.
Hasta el momento tengo este código pero ya es un dolor de cabeza ya que todo lo he aprendido de la ayuda y no he logrado hacer más.
Sub Macro1()
Workbooks.Open Filename:="C:\Documents and Settings\Silvia\Escritorio\Libro1.xls"
Dim n As Range
    palabra_a_buscar = InputBox("Escribe el Folio a Buscar", "Search Style")
        Set n = Cells.Find(What:=palabra_a_buscar)          
    If n Is Nothing Then
    MsgBox "Tu folio no ha sido encontrado, por favor verificalo"
    Else
    Range(n.Address).Select
    MsgBox "El Folio se encuentra seleccionado " & UCase(palabra_a_buscar) & "."
    End If
Set n = Nothing
End Sub
Lo que he logrado es que al activar la macro se abra el archivo donde quiero buscar, me pida el valor a buscar pero ya no se como restringir la buqueda a solo la columna B y no todo el libro o la hoja.
De antemano muchas gracias a quien pueda echarme una mano, Saludos.
Respuesta
1
Vamos a ver, vamos a empezar desde el principio, te voy a dar una solución a ver si te sirve, de la forma que lo hice yo en mi programa de gestión.
Primero vamos a suponer para hacértelo más fácil que el archivo en el que quieres buscar esta en la la siguiente ubicación.
C:\Documents and Settings\Silvia\Escritorio\
El libro se llama Libro1.xls
Voy a poner la palabra "rem" en cada comentario para que sepas que es una aclaración, ¿ok? Empezamos.
1º. Abrimos un libro nuevo.
2º. Entramos en VBA a través de ALT+F11.
4º. Nos vamos a INSERTAR > USERFORM.
5º. Colocamos 6 textbox y un botón de comando, que se llamará commandButton1
6º. Colocamos otro botón de comando llamado CommandButton2.
Ahora vamos a empezar a programar, hacemos doble Click en el commandButton1 y nos aparece el panel para escribir el código. Entonces empezamos a programar.
Sub CommandButton1_click()
Dim buscar as excel.range
Rem Abrimos el libro donde queremos hacer la búsqueda:
Workbooks.Open Filename:= "C:\Documents and Settings\Silvia\Escritorio\libro1.xls"
Rem Activamos la hoja donde queremos buscar el dato:
Workbooks("libro1.xls").Sheets("hoja1").Activate
Rem Le decimos que nos busque el dato que escribamos en el Textbox1, el cual se encuentra en la columna B.
Set buscar = Workbooks("libro.xls").Sheets("hoja1").Range("b:b").Find (What:=Textbox1,_
                                       LookIn:=xlFormulas, _
                                       LookAt:=xlPart, _
                                       SearchOrder:=xlByRows, _
                                       SearchDirection:=xlNext, _
                                       MatchCase:=False)
Rem Ahora le decimos que si encuentra el dato, nos copie la búsqueda en los textbox correspondientes:  
  If Not buscar Is Nothing Then
Textbox2 = buscar.Offset(0, 1).Value
Textbox3 = buscar.Offset(0, 2).Value
textbox4 = buscar.Offset(0, 3).Value
Textbox5=buscar.Offset(0,4).Value
Textbox6 = buscar.Offset(0,5).Value
Rem Ahora le decimos que si no lo encuentra, nos muestre un mensaje diciendo que el número no ha sido encontrado:
        Else
        MsgBox "El número no se encuentra en la base de datos. Compruebe que ha introducido la referencia correcta"
    End If
Rem Una vez nos ha encontrado el dato, guardamos el libro activo y lo cerramos:
ActiveWorkbook. Sabe
ActiveWorkbook.Close
Muy bien, una vez hecho esto vamos a programar el segundo CommandButoon, pero antes vamos a crear un nuevo libro de excel y guardarlo con el nombre libro2.xls en la ubicación:
C:\Documentos and Settings\Silvi\Escritorio
Ahora empezamos a programar el CommandButton2.
Sub CommandButton2_Click()
Rem abrimos el libro 2.
Workbooks.Open Filename:="c:\documentos and settings\Silvia\Escritorio\libro2.xls"
Rem Activamos la hoja donde queremos escribir los datos y nos vamos a la celda A1
Workbooks("libro2.xls").Sheets("hoja1").Range("A1").Select
Insertamos una fila para escribir los datos:
Selection.Entirerow.Insert
Rem Ahora pasamos los datos de los Textbox a la hoja1 del libro2.
Activecell.FormulaR1C1 = Textbox1.Value
Activecell.Offset(0, 1) = Textbox1.Value
Activecell.Offset(0, 2) = Textbox1.Value
Activecell.Offset(0, 3) = Textbox1.Value
Activecell.Offset(0, 4) = Textbox1.Value
Activecell.Offset(0, 5) = Textbox1.Value
Rem Ahora limpiamos los Textbox
Textbox1 = ""
Textbox2 = ""
Textbox3 = ""
Textbox4 = ""
Textbox5 = ""
Textbox6 = ""
Rem Pasamos el cursor al Primer textbox con el comando Setfocus
Textbox1.Setfocus
Rem Ahora Guardamos el libro y lo cerramos.
ActiveWorkbook. Sabe
ActiveWorkbook. Close
Esto sería todo, espero que te sirva, si tienes alguna duda aquí estamos.
Hasta pronto.
Muchas gracias Chikoloko84 le diste orden a mi idea!
Lamentablemente tengo el problema de que escriba lo que escriba en el TextBox 1 me aparece el MsgBox "El número no se encuentra en la base de datos. Compruebe que ha introducido la referencia correcta"
Supongo que el problema esta con el IF, ¿puedes echar una vistazo?
Mucha gracias por responder tan rapido
Disculpa Chikoloko84 ya lo ha funcionado resulto ser un error mio al escribir los parámetros de la búsqueda. Una ultima consulta.. ¿Hay manera de que asigne celdas especificas para cada textbox al momento de pegarlas en el otro archivo?
Me has ayudado bastante muchísimas gracias
De nuevo me alegro que te haya servido, como bien dices si puedes hacer que el valor que aparece en el textbox se copie en una celda determinada, vamos a ver como puedes hacerlo:
Primero voy a aclararte una cuestión, como bien sabes el valor que quieres buscar, es el que escribes en el textbox1, ¿verdad? Pues bien, ahora voy a explicarte lo que hace la parte del código que te pongo a continuación: (Esto es lo que tienes escrito en tu código, está copiado de lo que te puse antes:
Rem Activamos la hoja donde queremos escribir los datos y nos vamos a la celda A1
Workbooks("libro2.xls").Sheets("hoja1").Range("A1").Select
Rem Insertamos una fila para escribir los datos:
Selection.Entirerow.Insert
Rem Ahora pasamos los datos de los Textbox a la hoja1 del libro2.
Activecell.FormulaR1C1 = Textbox1.Value
Activecell.Offset(0, 1) = Textbox1.Value
Activecell.Offset(0, 2) = Textbox1.Value
Activecell.Offset(0, 3) = Textbox1.Value
Activecell.Offset(0, 4) = Textbox1.Value
Activecell.Offset(0, 5) = Textbox1.Value
En este trozo de código, primero abrimos el libro 2 nos colocamos en la hoja 1 y colocamos el cursor en la celda A1 PARA escribir los datos de los textbox con el comando
Workbooks("libro2.xls").Sheets("hoja1").Range("A1").Select
Después de insertar una fila con el comando Selection. Entirerow. Insert, activamos la celda donde se encuentra el cursor con el instrucción Activecell
Entonces una vez activada la celda con la instrucción Activecell, después ponemos el punto y le colocamos la instrucción Offset.
El comando Offset, nos permite desplazarnos o bien una celda a la derecha si colocamos como vemos Offset(0, 1), en este caso el 0 nos indica que estamos en la columna activa, donde se encuentra el cursor y el 1 nos indica que el cursor debe moverse una celda a la derecha. De esta forma podemos colocar el cursor donde queramos desde la celda activa. Me explico:
Offset(0, 1) - Nos lleva una celda hacia la derecha.
Offset(0, 2) - Nos lleva dos celdas hacia la derecha.
Offset(0, 3) - Nos lleva tres celdas hacia la derecha.
Y así sucesivamente.
Offset(0, n), siendo n un numero, que nos indicará el número de celdas que el cursor debe desplazarse hacia la derecha.
Si el valor 1, 2 ó 3 lo ponemos en negativo, es decir (0, -1), (0, -2), (0, -3)... etc
Nos llevará el cursor hacia la izquierda
Offset(0, -n) siendo n un número en negativo.
En este caso desplazará el cursor en la misma fila hacia la derecha o hacia la izquierda, dependiendo del´si el número es positivo o negativo respectivamente.
Si lo ponemos al revés, es decir:
Offset(1,0)
Offset(2,0)
Offset(3,0)
Offset(n,0)
Nos desplazará el cursor hacia arriba o hacia abajo despendiendo de si el numero es positivo o negativo, dentro de la columna activa.
Y ahora vamos a tu pregunta, vamos a colocar el valor de los textbox en una celda específica:
Para colocar el cursor en una celda determinada utilizaremos la instrucción Range, de esta forma podemos poner los textbox en la celda que queramos, pero siempre con el documento abierto y la hoja activada. Entonces vamos a ello:
Rem Primero abrimos el libro:
Workbooks.Open filename:="c:\documentos and settings\Silvia\escritorio\libro2.xls"
Rem ahora activamos la hoja donde queremos escribir los datos de los textbox y con el comando range situamos el cursor en la celda que nosotros queramos, por ejemplo C5
Workbooks("libro2.xls").Sheets("hoja1").Range("C5")
Rem Ahora activamos la celda y pasamos el valor del textbox:
Activecell.FormulaR1C1= Textbox1
Rem Para el textbox2 hacemos lo mismo, por ejemplo colocamos el valor del textbox2 en F5
Workbooks("libro2.xls").Sheets("hoja1").Range("F5")
Activecell.FormulaR1C1= Textbox1
Rem Para el textbox3 hacemos lo mismo, por ejemplo colocamos el valor del textbox3 en H6
Workbooks("libro2.xls").Sheets("hoja1").Range("H6")
Activecell.FormulaR1C1= Textbox1
Así sucesivamente con todos los textbox o con los que quieras colocar.
Una cosa a modo de información que igual te sirve, ten en cuenta que el lenguaje de Visual Basic, se lee al revés, es decir, de derecha a izquierda.
Creo que nada más espero que te sirva y siento haberme extendido más de la cuenta.
Recuerda que si quieres colocar el valor de los textbox en celdas específicas debes sustituir el trozo de código que te puse en esta respuesta por el que te puse al final.
Si tienes alguna duda ya sabes donde encontrarme, si te solucione el problema no olvides puntuar y finalizar la pregunta,
hasta la próxima amiga.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas