Hola Amigo: Sabes, tengo un código N°orden de compra que se encuentra en un libro pero tengo 50 libros donde buscarlo. Como puedo pedirle a excel que me diga en que libros esta. Muchas Gracias
1 respuesta
Respuesta de fejoal
1
1
fejoal, Por falta de tiempo para responder como me gusta hacerlo suspendo...
Usualmente, en la pantalla de diálogo de la opción "Archivo" | "Abrir" basta colocar en la casilla "Texto o Propiedad" el valor a buscar y, luego, presionar el botón de Búsqueda Avanzada" para que MS Excel intente encontrar el dato en los archivos del directorio indicado. Desde luego, esto toma su tiempo, pero suele funcionar bien. En caso de que así no fuese y tengas la certeza de que el dato está en alguno de esos 50 archivos, una alternativa de solución es utilizar una macro para que realice la búsqueda, hoja por hoja de archivo por archivo que esén incluidos en una carpeta. Para su funcionamiento solo necesitas crear un archivo nuevo que será un auxiliar para juntar todos los archivos en un único archivo. Este archivo debe tener una sola hoja llamada INICIO. En ella, coloca en la celda C7 la dirección de la carpeta donde debe buscar todos los archivos. En la celda C8, ingresa qué tipo de archivos debe considerar. Esto te permite, seleccionar algunos de los archivos del directorio indicado en C7. Así, por ejemplo, si quieres que sólo considere los archivos que empiezan con "Cod", coloca en esa celda: Cod*.xls Si quieres que traiga todos los archivos, simplemente deja en tal celda: *.xls La celda C9 permite que coloques una clave, en caso de que los archivos a abrir tuvieran la misma clave de protección para apertura. Si no tuviesen clave, deja esa celda en blanco. Finalmente, coloca en la celda C10 el valor (código) a buscar. Graba este archivo. Ahora falta colocar la macro que hace el trabajo. Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "´Modulo") y pega el siguiente código: Sub BusqVsFiles() Dim MiCarpeta As String, MisArchivos As String, MiClave As String MiCarpeta = Trim(Sheets("INICIO").Range("C7").Value) & IIf(Right(Trim(Sheets("INICIO").Range("C7").Value), 1) = "\", "", "\") MisArchivos = Trim(Sheets("INICIO").Range("C8").Value) MiClave = Trim(Sheets("INICIO").Range("C9").Value) aBuscar = Trim(Sheets("INICIO").Range("C10").Value) encontr = False With Application.FileSearch .LookIn = MiCarpeta .SearchSubFolders = True .FileName = MisArchivos If .Execute(SortBy:=msoSortByFileName, SortOrder:=msoSortOrderAscending) > 0 Then For i = 1 To .FoundFiles.Count DirFile = .FoundFiles(i) Workbooks.Open FileName:=DirFile, Updatelinks:=False, PASSWORD:="" Application.Calculation = xlManual ActiveWorkbook.Unprotect PASSWORD:=MiClave '*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*' '* TAREA A EFECTUAR en archivo: BUSCAR DATO EN TODOS LOS ARCHIVOS *' '*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*' Application.ScreenUpdating = False For sht = 1 To Sheets.Count Sheets(sht).Select Set c = Cells.Find(aBuscar, LookIn:=xlValues) If Not c Is Nothing Then encontr = True c.Select Application.ScreenUpdating = True MsgBox "Su búsqueda de " & aBuscar & "fue exitosa", vbInformation, "ENCONTRADO!!!" Set c = Nothing Exit Sub Else ActiveWorkbook.Close False Sheets("INICIO").Select End If Next Set c = Nothing Application.ScreenUpdating = True '========================================================================== ' FIN tarea en archivo '========================================================================== Next i If encontr = False Then MsgBox "El valor " & aBuscar & "no fue encontrado en los " & i - 1 & " archivos revisados", vbCritical, "NO ESTA, (parece)" Else MsgBox "No se encontró ningún archivo " & MisArchivos & " en " & Chr(10) & MiCarpeta End If End With End Sub Hacia la mitad de la macro notarás que está indicada cual es la tarea que debe realizar en cada archivo. De esta manera, si otro día quieres hacer otra cosa con varios archivos en un directorio, bastará que coloques el código a ejecutar en este lugar. Cierra el editor de visual basic y graba el archivo. El toque final sería colocar un botón en la hoja INICIO para activar la macro. Para esto, una vez copiada la macro en el archivo, muestra la barra de herramientas de "Formularios" ("Ver" | "Barras de herramientas" | "Formularios". De ella, toma el icono de "botón" y dibújalo en tu hoja. Al haber presionado el icono, el cursor del mouse se transformará en una cruz fina. Mantén presionado el botón derecho y arrástralo hasta donde desees dibujando el botón. Cuando sueltes la tecla, automáticamente aparecerá la lista de macros disponibles de dónde podrás seleccionar el que quieres asociar. Simplemente, dale doble click. También, puedes cambiar la vinculación de un botón con una macro, dando click derecho sobre él y eligiendo "Asignar macro". Otra vez, la lista de macros disponibles te permitirá realizar tal asignación. Listo. Tienes un archivo que abrirá uno a uno los que encuentre en la carpeta y revisará cada hoja en él. Si no encuentra el valor indicado en C10, cerrará ese archivo. Luego hará lo propio con el siguiente y así, hasta terminar con todos los indicados o hasta que encuentre una coincidencia. °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° A cambio de mi tiempo, sólo te pido dos cosas: - Finaliza (con puntaje y comentario) esta pregunta - Ingresa al sitio www.porloschicos.com y, si quieres, presiona el botón de donación (es gratis). Confío en que lo harás.