BUSCARV en vba con diferentes libros

Hola he leído muchos de tus artículos y me parecen excelentes y también me han sacado de muchas dudas, por eso quiero realizarte esta consulta.
Tengo una base de datos en la hoja "BDG" de un libro llamado "base de datos.xlsm", tengo también un libro llamado "formato asistencia", este formato ya lo tengo anclado a la base de datos tal que al ingresar el numero de cedula, este es buscado en la base de datos del primer libro y retorna el resto de datos. De este formato voy guardando copias cada vez que hay un evento por lo que en cada archivo de estos va quedando registrados los datos de las personas que fueron a cada evento, estos archivos van siendo guardados en la siguiente ubicación, c:/ASISTENCIA/nombredelarchivo.xlm. Ahora y el motivo de mi consulta, quiero el en primer libro, en la hoja "BDG", que frente a cada empleado registrado yo´pueda agregar los eventos a los que asistió, usando como referencia los archivos guardados con la asistencia a cada evento, esto lo he logrado hacer manualmente, cada que creo un nuevo archivo de asistencia, en una nueva columna en la base de datos incluyo el evento usando la función buscarV y listo, pero quiero hacerlo por medio de una macro en la que pida al usuario ingresar el nombre del archivo y listo o que de alguna manera abriera un explorador para seleccionar el archivo, no se si es mucho pedir pero me seria de gran utilidad tu ayuda.
Lo intente copiando una delas funciones buscarv y copiandola en donde necesitaba con una macro y modifique la ruta de acceso a la matriz de busque, con esto cada vez que ejecutaba la macro me pedía seleccionar el archivo de cual quería sacar la información por medio de un explorador, pero al seleccionarlo, todos los registros de otros eventos los cuales había incluido esta fórmula se actualizaban al evento que seleccionaba, por lo que así no sirvió de nada.
Espero obtener una ayuda o una guía sobre como realizar esto gracias.

1 respuesta

Respuesta
1
Creo que podrías agregar una rutina para que se ejecute antes de cerrar el libro Formato. (Evento BeforeSave)
Lo que deberá hacer esta macro, es buscar por el nro de cédula en la base (con Find).
Si encuentra el dato buscar la primer col libre y allí colocar la fecha o evento.
Y así con todas las cédulas que se encuentren en ese formato y luego guardarlo.
Estoy suponiendo que cada empleado tiene 1 registro o fila, y los eventos los vas colocando en columnas siguientes.
Si no es así, necesitaré saber un poco más cómo están armados esos libros.
Hola quizás no me explico bien, intentare ser más explicito.
Tengo:
Libro 1: basededatos
               a b
1 cedula nombre
2 80797492 pepe
3 53077789 lucha
4 80145955 pata
Este libro contiene aprox 2000 registros
Y tengo una serie de libros que se crean cada vez que hay un evento, estos conservan un mismo formato, por ejemplo aquí muestro tres archivos distintos es decior tres eventos distintos
archivo1: even1 archivo2: even2
a b c a b c
1 cedula nombre pago 1 cedula nombre pago
2 80145955   pata         $20000                     2   80797492        pepe               $25000
3 53077789 lucha $20000 3 53077789 lucha $25000
archivo3: even3
a b c
1 cedula nombre pago
2 80797492 pepe $20000 "( encada libro se manejan de 50 a 200
3 80145955 pata $18000 registros de asistencia )"
Como vez esto es lo que tengo hasta el momento en los archivos de asistencia con ingresar la cedula me trae el nombre con la fórmula buscarv y hay no hay problema. Ahora lo que necesito es que por medio de una macro, yo pueda desde el libro1(basededatos) traer los datos de quien asistió a cada evento, específicamente trayendo el valor de la columna c de los archivos de asistencia, llegando a lago así:
Libro 1: basededatos
            a b c d e f
1    cedula         nombre        even1         enev2        even3        even4
2   80797492      pepe                           $25000       $20000
3   53077789      lucha         $20000      $25000
4 80145955 pata $20000 $18000
Y así sucesivamente generansose una nueva columna al ejecutar la macro y que esta pida seleccionar la ubicación del archivo del nuevo evento que se quiera ingresar.
Espero y agradezco que me puedas colaborar con esto. Gracias
Lo que ya te envié es para que lo utilices de ahora en más, hacia adelante.
Para armar la base con archivos ya guardados, debieras utilizar el evento GetOpenFilename, para buscar cada archivo, abrirlo, y utilizar Find en lugar de colocar la fórmula BuscarV. Ejemplo:
Set dato = workbooks(formato).Sheets(hoja).Find(cedula)......
if not (dato) is nothing then
'significa que lo encontró. En ese caso buscar la última col del registro en la base, y en col siguiente copiar los datos (fecha, importe, etc) pero copiando, sin fórmulas.
Espero se haya entendido un poco más. Cuando armes la rutina, si necesita algún ajuste escribime nuevamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas