none
Abrir todos los libros .xlsm de un directorio RRS feed

  • Pregunta

  • Buenos días!

    Os escribo porque me estoy volviendo loca.

    Tengo un directorio donde tengo unos ficheros con macros *.xlsm" (que llamaremos Excel de datos) que recogen información de distintas personas, y estoy haciendo otro Excel (que llamaremos Excel de gestión) para un gestor que debe abrir todos los ficheros de datos de ese directorio y extraer la información que ha metido cada uno.

    MI PROBLEMA: no sé si es porque los ficheros tienen macros con código en el evento Workbook_Open(), pero sólo me abre el primero y se interrumpe la macro del Excel de gestión sin arrojar errores.

    EXPLICACIÓN:

    Como quiero que el gestor tenga liberta de tener este fichero de gestión donde quiera, lo primero que hago es abrir un diálogo (GetOpenFilename) para que me indique en qué ruta están los ficheros.

    Luego tengo el bucle que me debería abrir todos los ficheros (os pongo primero el código donde sólo se imprimen trazas): 

        'Usamos objetos de sistema
        Dim objArchivoSistema As Object
        Dim objCarpeta As Object
        Dim objFichero As Object
        Dim rutaExcels As String
        
        'Recogemos la ruta donde están todos los excel de datos
        rutaExcels = dameRutaExcels()
    
        Set objArchivoSistema = CreateObject("Scripting.FileSystemObject")
        Set objCarpeta = objArchivoSistema.GetFolder(rutaExcels)
        
        Debug.Print "Path de carpeta: " & objCarpeta.Path
    
        For Each objFichero In objCarpeta.Files
            Debug.Print "Nombre: " & objFichero.Name
            Debug.Print "Path: " & objFichero.Path
        Next objFichero

    Al ejecutar este código, obtengo en consola la ejecución del bucle de manera correcta:

        Path de carpeta: C:\Prueba\Datos
        Nombre: Fichero de datos 1.xlsm
        Path: C:\Prueba\Datos\Fichero de datos 1.xlsm
        Nombre: Fichero de datos 2..xlsm
        Path: C:\Prueba\Datos\Fichero de datos 2.xlsm
        Nombre: Fichero de datos 3.xlsm
        Path: C:\Prueba\Datos\Fichero de datos 3.xlsm

    PERO, cuando incorporo el código para abrir los ficheros, el problema es que sólo me abre el primero y se interrumpe la macro sin ningún error (no se pinta la traza de después).

        'Usamos objetos de sistema
        Dim objArchivoSistema As Object
        Dim objCarpeta As Object
        Dim objFichero As Object
        Dim rutaExcels As String
        
        'Recogemos la ruta donde están todos los excel de datos
        rutaExcels = dameRutaExcels()
    
        Set objArchivoSistema = CreateObject("Scripting.FileSystemObject")
        Set objCarpeta = objArchivoSistema.GetFolder(rutaExcels)
        
        Debug.Print "Path de carpeta: " & objCarpeta.Path
    
        For Each objFichero In objCarpeta.Files
            Debug.Print "Nombre: " & objFichero.Name
            Debug.Print "Path: " & objFichero.Path
            Workbooks.Open Filename:=objFichero.Path, ReadOnly:=True
            Debug.Print "El archivo que hemos abierto es: " & archivo
        Next objFichero
    La salida por consola:
        Path de carpeta: C:\Prueba\Datos
        Nombre: Fichero de datos 1.xlsm
        Path: C:\Prueba\Datos\Fichero de datos 1.xlsm
    sábado, 19 de septiembre de 2020 12:55

Todas las respuestas

  • No se si ya lo has hecho pero deberías recoger los posibles errores con un Try ... Catch

    Estás abriendo el Excel como solo lectura. ¿Puede que la macro esté queriendo realizar alguna modificación? Prueba quitando el ReadOnly:=True


    Saludos, Javier J

    lunes, 21 de septiembre de 2020 16:53