![]() |
Excel VBA. ¿como hago para buscar datos de otro libro? Hola amigos, quisiera realizar una consulta, pues no doy con ello. En una hoja de excel tengo un userform que me realiza un filtro de datos según el código que yo le paso (DNI), la lectura de los datos lo saca de una hoja del mismo libro donde se encuentra el userform. el código que utilizo es este.. 'buscamos por el filtro DNI Cells.Find(What:=DNI, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, SearchFormat:=False).Activate y una vez que encuentra la cadena de texto a buscar, pues con el ActivelCell.Offset extraigo los valores de las celdas a la derecha y las pongo en las celdas del mismo libro, ahora bien... mi duda es la siguiente... ¿como podría realizar la búsqueda en otra hoja de otro libro distinto al abierto? Por ejemplo, que empezara la busqueda en la celda A2 de la hoja Prueba de un libro que estuviera guardado en mis documentos. Bueno, como siempre, gracias de antemano. |
Excel VBA. ¿como hago para buscar datos de otro libro? No sé si estoy entendiendo adecuadamente tu necesidad. Sin embargo, comienzo por mostrarte el siguiente código: Código: Sub Macro1()a) abrimos el libro "Libro2.xls" b) Pasamos a la hoja "Prueba" c) Buscamos la información "DNI" d) opiamos un rango de 4 celdas a la derecha del dato hallado e) cerramos "Libro2.xls" f) pegamos lo copiado a partir de la celda "A5". ¿Es ésto lo que estás buscando? ¿Alguna otra cosa? Saludos |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? Hola de nuevo... ante todo gracias por responder mrocf. En principio parece que es lo que estoy intentando sacar, que desde un libro abra otro nuevo, seleccione datos de este último y los traiga a celdas del primer libro, volviendo a cerrar el segundo libro... voy a chequearlo mañana por la mañana y te digo. lo dicho, gracias por responder.. un saludo |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? hola de nuevo, esta mañana estuve chequeando el code que me pasastes, me sirvió para lo que yo quería,, aunque le estuve haciendo algunos retoques, te cuento, cogo los valores del libro que se abre y los paso a unos textbox de un formulario, hasta ahí bien, pero me gustaría que justo en el momento de recoger los valores tambien los insertara en las celdas que yo especifique.... Rem seleccionamos la celda del DNI, atrapamos su valor y lo pasamos al campo de texto del formulario. DNI = ActiveCell.Offset(0, 0).Value DNI.Value = DNI Rem hacemos lo mismo con todos los demas datos, APELLIDO1 APELLIDO1 = ActiveCell.Offset(0, 1).Value APELLIDO1.Value = APELLIDO1 Rem APELLIDO2 APELLIDO2 = ActiveCell.Offset(0, 2).Value APELLIDO2.Value = APELLIDO2 Rem NOMBRE NOMBRE = ActiveCell.Offset(0, 3).Value NOMBRE.Value = NOMBRE ¿como se haría para al mismo tiempo que los textbox recogen los valores se insertaran en las celdas A2, B2, C2 Y D2 respectivamente? otra cosilla,(voy a abusar de tí, je je) al realizar la búsqueda, veo que se queda algunas veces el formulario como "pillado", como que no atrapa bien los datos y tengo que pulsar dos o tres veces el botón que activa la busqueda para que al final me los pille bien, decir que busca en una hoja de excel el dni que está en formato de texto, ¿tendrá eso que ver algo con que se queda pillado con la busqueda? bueno, gracias de nuevo. |
Excel VBA. ¿como hago para buscar datos de otro libro? Hola Epa2: Mira, vamos por partes... 1) ActiveCell.Offset(0, 0) es lo mismo que: ActiveCell 2) Entiendo que lo que estás haciendo es tomar los valores del libro que abres y asignarlos a las cuatro variables: "DNI", "APELLIDO1", "APELLIDO2" y "NOMBRE", para luego transferir ese valor a los "textbox" del mismo nombre. Entonces solo te resta asignar los valores a las celdas mediante: Código: [A2].Formula = DNICita:
a) Chequea que estés pasando adecuadamente los parámetros de la búsqueda: What:=DNI, LookIn:=xlValues LookAt:= xlPart MatchCase:=False b) Si cuando haces la búsqueda tienes abierto el UserForm, es probable que te convega no realizar tu búsqueda así: Código: Cells.Find(What:=DNI, After:=ActiveCell, LookIn:=xlValues, LookAt _Código: Set RangeDNI = Cells.Find(What:=DNI, After:=ActiveCell, _Saludos |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? ufffff, me resulta muy interesante lo que me dices mrocf , en serio, me has abierto el "apetito" :-) mañana por la mañana me pongo a probarlo, a ver como me queda. muchas gracias por la ayuda que me estás prestando... un saludo |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? Hola de nuevo, esta mañana seguí peleando con el vba. mira, en primer lugar el codigo que me pasastes para "pulir" la busqueda funciona mejor que el primero, ahora el formulario no se me queda pillado, todo parece indicar que con el primer _Clic al botón encuentra los registros. Muchas gracias por el cambio de código. ;-) en los campos textbox del formulario me aparecen todos los datos correctamente. :-) ahora bien, continuando con el proyecto, ¿como pasar los datos de los textbox a las celdas?. Estuve probando con lo que indicastes.... de esta forma... Rem seleccionamos la celda del DNI, atrapamos su valor y lo pasamos al campo de texto del formulario. Tambien ponemos el valor de la variable en la celda A2 DNI = RangeDNI.Value [A2].Formula = DNI Rem hacemos lo mismo con todos los demas campos, APELLIDO1 APELLIDO1 = RangeDNI.Offset(0, 1) [B2].Formula = APELLIDO1 Rem APELLIDO2 APELLIDO2 = RangeDNI.Offset(0, 2) [C2].Formula = APELLIDO2 Rem NOMBRE NOMBRE = RangeDNI.Offset(0, 3) [D2].Formula = NOMBRE sin embargo, este code no me pega los datos en las celdas, siguen vacías... estuve leyendome la ayuda de VBA y probé a cambiarlo por esto.... Rem seleccionamos la celda del DNI, atrapamos su valor y lo pasamos al campo de texto del formulario. Tambien ponemos el valor de la variable en la celda A2 DNI = RangeDNI.Value Worksheets("formulario").Range("A2").Value = DNI Rem hacemos lo mismo con todos los demas campos, APELLIDO1 APELLIDO1 = RangeDNI.Offset(0, 1) Worksheets("formulario").Range("B2").Value = APELLIDO1 Rem APELLIDO2 APELLIDO2 = RangeDNI.Offset(0, 2) Worksheets("formulario").Range("C2").Value = APELLIDO2 Rem NOMBRE NOMBRE = RangeDNI.Offset(0, 3) Worksheets("formulario").Range("D2").Value = NOMBRE Con esto tambien me daba error, me decía que el subíndiceestaba fuera del intervalo, y me señala la línea Worksheets("formulario").Range("A2").Value = DNI como le he cogido "gustillo" al tema, seguí leyendome la documentación y probé lo siguiente.... DNI = RangeDNI.Value Worksheets("formulario").Cells(2, 1).Value = DNI pero tambien me decía lo mismo del subíndice, como creo que lo tengo a punto de "caramelo" seguí probando con esta opción.. DNI = RangeDNI.Value Range("A2").Value = DNI APELLIDO1 = RangeDNI.Offset(0, 1) Range("B2").Value = APELLIDO1 APELLIDO2 = RangeDNI.Offset(0, 2) Range("C2").Value = APELLIDO2 NOMBRE = RangeDNI.Offset(0, 3) Range("D2").Value = NOMBRE pero tampoco, y creo que se me escapa algo, a ver si sabes donde me estoy equivocando... un saludete. |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? hola de nuevo, creo que ya lo he pillado, era más facil de lo que parecía... tan solo así... en el evento del clic del boton Range("A1").Select ActiveCell.FormulaR1C1 = DNI Range("B1").Select ActiveCell.FormulaR1C1 = APELLIDO1 Range("C1").Select ActiveCell.FormulaR1C1 = APELLIDO2 Range("D1").Select ActiveCell.FormulaR1C1 = NOMBRE decir que aún no lo he probado con el proyecto, pues lo tengo en el pc del trabajo y hasta el lunes no lo voy a poder trastear como es debido, pero las pruebas iniciales en casa me va bien.... ya me dices que te parece... en fin, seguimos para adelante ;-) un saludete |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? Que bueno que estés experimentando !!! es la mejor manera de aprender. Por lo que te "tiro" algunas sugerencias adicionales: 1º) Cita:
Range("A1").FormulaR1C1 = DNI Éste hace lo mismo... pero sin desplazamiento. Por lo tanto: menos líneas de programa y procesamiento más rápido... 2º) Range("A1") es absolutamente equivalente a escribir: [A1]. Personalmente, prefiero el segundo método. Aplicado al ejemplo anterior: [A1].FormulaR1C1 = DNI 3º) Cita:
Cuando se ejecuta: [A2].Formula = DNI probablemente la planilla activa no sea aquella donde quieres escribir el valor anterior, sino la planilla 2da. (en donde realizas la búsqueda). De modo que el código está escribiendo el valor "DNI" en la planilla equivocada. Cuando tu perfeccionas el código mediante: Worksheets("formulario") te da error de subíndice pues la 2da. planilla (la activa en ese momento) no tiene una hoja llamada "formulario"... Quien si la tiene es la 1er. planilla... ¿se entiende?... En tal caso: dos soluciones a) O realizas expresa mención a la 1er. planilla: Workbooks("nombre_1er_archivo").Worksheets("formul ario"), ó b) activas el 1er. archivo: Windows("nombre_1er_archivo").Activate c) Hay otros métodos (más sutiles y eficientes)... pero para empezar: está muy bien. Saludos |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? hola de nuevo... resulta muy interesante tus puntualizaciones,,, estoy deseando probarlo el lunes. además, ya me he animado con este pequeño proyecto y creo que le voy a meter mano y añadirle funcionalidades al userform, ya te digo. gracias por la ayuda prestada,,, nos vemos la semana que viene!!!!! buen finde. |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? Hola de nuevo...... es curioso esto de la programación, por lo que veo hay que utilizar más la lógica que las mates, aunque ambas nunca se me dieron bien, ;-) te cuento lo que me pasa,,,, todo parece bien, abro el libro, realizo la búsqueda en el libro abierto, cojo los valores, los agrego a los textbox y cierro el libro abierto anteriormente, hasta aquí bien,, pues le añado las siguientes líneas (las que me aconsejastes) para que tambien al mismo tiempo que realiza todo lo anterior, meta los valores en las celdillas,,, NOMBRE = RangeDNI.Offset(0, 1) [A2].FormulaR1C1 = NOMBRE APELLIDO1 = RangeDNI.Offset(0, 2) [A3].FormulaR1C1 = APELLIDO1 APELLIDO2 = RangeDNI.Offset(0, 3) [A4].FormulaR1C1 = APELLIDO2 En teoría parece que funciona, pero como la práctica luego a la hora de la verdad pocas veces tiene que ver con la teoría, je je, pues esas líneas no me incluye los valores en las celdillas, las deja vacías,, se ejecuta bien hasta que se cierra el libro de donde sacamos los datos y se atrapan los valores en los textbox, pero estas líneas que te he puesto no llegan a ejecutarse (en concreto las [A2].FormulaR1C1 = NOMBRE, etc, etc.), he estado mirando un poco el código, para ver donde podría estar el fallo, y he visto que el clic del boton activa un procedimiento privado (private sub), ignoro si esto tendrá que ver algo con lo que te comento. Por otro lado, me he puesto a realizar pruebas, y he metido un segundo botón en el formulario que hace esta línea con el clic [A2].FormulaR1C1 = NOMBRE ¡¡¡y sin embargo este botón si cumple la instrucción!!! Private Sub CommandButton1_Click() [A4].FormulaR1C1 = APELLIDO2 End Sub ¿por que puede ser que el primer botón no me quiera hacer caso? :-( un saludete. pd: la línea de cerrar el libro la tengo al final del procedimiento,, queda así... NOMBRE = RangeDNI.Offset(0, 1) [A2].FormulaR1C1 = NOMBRE APELLIDO1 = RangeDNI.Offset(0, 2) [A3].FormulaR1C1 = APELLIDO1 APELLIDO2 = RangeDNI.Offset(0, 3) [A4].FormulaR1C1 = APELLIDO2 ActiveWindow.Close SaveChanges:=False |
Excel VBA. ¿como hago para buscar datos de otro libro? Hola Epa2 : Creo que aún no has implementado la asignación: Workbooks("nombre_1er_archivo").Worksheets("formul ario") ... De modo que -si estás de acuerdo- te adjunto un modelo de lo que quieres realizar. Por ejemplo: Libro1.xls : contiene el UserForm1 Libro2.xls : contiene la base de datos con DNI y Apellido y Nombre UserForm1 : contiene al TextBox1 (DNI), al TextBox2 (AyN) y al CommandButton1 (Buscar) En un Módulo de Prueba1.xls tienes la siguiente macro: Código: Sub BuscaDNIyNOMBRE()Código: Private Sub CommandButton1_Click()Creo que tienes para "entretenerte" un buen rato y de paso compara con tu código para encontrar por qué no se llega a ver en las celdas la información. Suerte y luego cuentas como te fue... |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? hola de nuevo mrocf de nuevo gracias por las sugerencia, como tu dices, creo que tengo para entretenerme un taco, (incluso algunos días), voy a ponerme mañana a intentar entender este code que me pasas... ya te digo.. un saludete. |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? Hola de nuevo, parecía que estaba muerto, pero no, voy "progresando" poco a poco, hay cosas de las que me estoy enterando y otras de las que no me entero ni aunque me den tortas en la cara :( estuve mirando algo de documentación, y junto con el code que me pusistes, estas dos líneas me estan ayudando a averigurar donde se encontraba el problema.. Con esta linea vamos atrapando el valor de las variables para ir "puliendo" el code MsgBox DNI.Value MsgBox ActiveCell.Worksheet.Name Gracias a estas líneas he ido pudiendo ver donde se encontraba el pequeño fallo, por lo visto, como tu decías, yo intentaba escribir en las celdillas del primer libro que abría, cuando lo que realmente quería es hacerlo en el primer libro. Ir cambiando en el code esas línea me ha permitido ir viendo el orden de la ejecución. son buenas para comprobar errores.. je je :) al menos ya puedo ir escribiendo en las celdillas los valores capturados. sigo liado con este pequeño "project", me gustaría ahora ir amoldandolo un poco, ya te comento un poco más adelante, (porque me huelo que tendré que pedirte alguna consulta más con esto), pero bueno.... un saludete. |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? Dicen que el movimiento se demuestra..."andando". Suerte Saludos |
Re: Excel VBA. ¿como hago para buscar datos de otro libro? Hola! Estuve buscando algo de ayuda en internet, y vi que ustedes estaban con este tema hace tiempo atras, pero creo que lo que necesito es algo un poco distinto. Quiero tomar un valor desde otro archivo de excel, pero este valor quiero asignarselo a una variable en una macro, como puedo realizar eso? Desde ya muchisimas gracias por la ayuda que me puedan brindar. Saludos! |
| La zona horaria es GMT -6. Ahora son las 06:43. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.