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