Abrir libros de Excel
Abrir libros de Excel
Hola a todos.
Soy completamente nuevo en la programación de Autoit. Buscando en el foro encontré el siguiente código que abre todos los archivos con una extensión dada en un directorio. Pero los abre todos a la vez. Me gustaría adaptarlo para poder abrir todos los libros de Excel que hay en un directorio. Pero no todos a la vez sino uno detrás de otro. Es decir, abrir un libro cuando el anterior se haya cerrado. ¿Cómo podría hacerlo y que además me pregunte en qué directorio quiero trabajar?
Os estaría muy agradecido si encontrara una solución.
Saludos
Soy completamente nuevo en la programación de Autoit. Buscando en el foro encontré el siguiente código que abre todos los archivos con una extensión dada en un directorio. Pero los abre todos a la vez. Me gustaría adaptarlo para poder abrir todos los libros de Excel que hay en un directorio. Pero no todos a la vez sino uno detrás de otro. Es decir, abrir un libro cuando el anterior se haya cerrado. ¿Cómo podría hacerlo y que además me pregunte en qué directorio quiero trabajar?
Os estaría muy agradecido si encontrara una solución.
Saludos
- Adjuntos
-
- abrir_libros_directorio.au3
- (575 Bytes) Descargado 283 veces
Re: Abrir libros de Excel
Hola. Lo único que tienes que hacer es remplazar ShellExecute por ShellExecuteWait.
Saludos
Saludos
- ............................................
......................................
Re: Abrir libros de Excel
Gracias Dany por tu aporte.
Con la función ShellExecuteWait me abre los libros uno por uno. Llama al siguiente cuando cierro Excel y el libro. Pero, para que la ejecución sea más rápida, ¿habría alguna forma de que no se cierre Excel? (Sólamente cada uno de los libros)
Con la función ShellExecuteWait me abre los libros uno por uno. Llama al siguiente cuando cierro Excel y el libro. Pero, para que la ejecución sea más rápida, ¿habría alguna forma de que no se cierre Excel? (Sólamente cada uno de los libros)
Re: Abrir libros de Excel
Hola. SI entendí bien. tendrías que usar la UDF de excel. entonces podrías hacer algo así.
Saludos
Código: Seleccionar todo
#include <File.au3>
#include <Array.au3>
#include <Excel.au3>
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") ;Esto para evitar error al verificar un archino que no existe
Local $oExcel = _Excel_Open() ;Crear la instancia de Excel
;Mostrar la cuadro de dialogo para seleccionar la carpeta a trabajar
Local $sCarpetaParaBuscarArchivos = FileSelectFolder("Seleccione la Carpeta para abrir los libros de Excel", @ScriptDir)
Local $sNombreHoja = 0
;si la carpeta es correcta procesar
If $sCarpetaParaBuscarArchivos Then
Local $aFiles = _FileListToArray($sCarpetaParaBuscarArchivos, "*.xlsx", 0, True) ;cambiar a la extensión Correcta "*.xlsm"
;~ _ArrayDisplay($aFiles)
For $i = 1 To $aFiles[0]
$sNombreHoja = StringTrimLeft($aFiles[$i], StringInStr($aFiles[$i], '\', Default, -1)) ;Obtenemos el nombre de la hoja de excel
_Excel_BookOpen($oExcel, $aFiles[$i])
;Esperamos hasta quee no exista la hoja de excel para continuar con la siguiente...
While IsObj($oExcel.Workbooks($sNombreHoja))
Sleep(100)
WEnd
Next
Else
MsgBox(64, "Información", "No seleccionó ninguna carpeta")
EndIf
; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
; Do anything here.
;~ ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
;~ @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
;~ @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
;~ @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
;~ @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
;~ @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
;~ @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
;~ @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
;~ @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
;~ @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
Saludos
- ............................................
......................................
Re: Abrir libros de Excel
Magistral !! Funciona !!
Un único "pero". Cada hoja de Excel lleva una macro VBA asociada que se ejecuta al abrir el libro con un Auto_Open(). Ahora con la UDF de Excel no se ejecutan las macros VBA. ¿Habría que añadir alguna función para que se ejecuten las macros de Excel?
Continuaré visitando periódicamente este foro y aprendiendo de los maestros del Autoit.
Un único "pero". Cada hoja de Excel lleva una macro VBA asociada que se ejecuta al abrir el libro con un Auto_Open(). Ahora con la UDF de Excel no se ejecutan las macros VBA. ¿Habría que añadir alguna función para que se ejecuten las macros de Excel?
Continuaré visitando periódicamente este foro y aprendiendo de los maestros del Autoit.
Re: Abrir libros de Excel
Hola. Unas Dudas.
Cuando abres el excel con doble click el macro se ejecuta automáticamente?
Cuando abres el excel con ShellExecute el macro se ejecuta automáticamente?
En cada hoja de excel el macro tiene el mismo nombre?
Saludos
Cuando abres el excel con doble click el macro se ejecuta automáticamente?
Cuando abres el excel con ShellExecute el macro se ejecuta automáticamente?
En cada hoja de excel el macro tiene el mismo nombre?
Saludos
- ............................................
......................................
Re: Abrir libros de Excel
Hola Dany.
Respondo a las preguntas:
- cuando abro excel con doble click la macro se ejecuta automáticamente.
- con ShellExecute la macro también se ejecuta automáticamente.
- las macros tienen el mismo nombre en todos los libros de excel.
Saludos
Respondo a las preguntas:
- cuando abro excel con doble click la macro se ejecuta automáticamente.
- con ShellExecute la macro también se ejecuta automáticamente.
- las macros tienen el mismo nombre en todos los libros de excel.
Saludos
Re: Abrir libros de Excel
Hola. Podrías probar si el macro se ejecuta de esta forma.
Saludos
Código: Seleccionar todo
#include <File.au3>
#include <Array.au3>
#include <Excel.au3>
Local $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") ;Esto para evitar error al verificar un archino que no existe
Local $oExcel = _Excel_Open() ;Crear la instancia de Excel
;Mostrar la cuadro de dialogo para seleccionar la carpeta a trabajar
Local $sCarpetaParaBuscarArchivos = FileSelectFolder("Seleccione la Carpeta para abrir los libros de Excel", @ScriptDir)
Local $sNombreHoja = 0
;si la carpeta es correcta procesar
If $sCarpetaParaBuscarArchivos Then
Local $aFiles = _FileListToArray($sCarpetaParaBuscarArchivos, "*.xlsx", 0, True) ;cambiar a la extensión Correcta "*.xlsm"
;~ _ArrayDisplay($aFiles)
For $i = 1 To $aFiles[0]
$sNombreHoja = StringTrimLeft($aFiles[$i], StringInStr($aFiles[$i], '\', Default, -1)) ;Obtenemos el nombre de la hoja de excel
_Excel_BookOpen($oExcel, $aFiles[$i])
$oExcel.Run("Coloca el nombre del macro aqui")
;Esperamos hasta quee no exista la hoja de excel para continuar con la siguiente...
While IsObj($oExcel.Workbooks($sNombreHoja))
Sleep(100)
WEnd
Next
Else
MsgBox(64, "Información", "No seleccionó ninguna carpeta")
EndIf
; User's COM error function. Will be called if COM error occurs
Func _ErrFunc($oError)
; Do anything here.
;~ ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
;~ @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
;~ @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
;~ @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
;~ @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
;~ @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
;~ @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
;~ @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
;~ @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
;~ @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc ;==>_ErrFunc
Saludos
- ............................................
......................................
Re: Abrir libros de Excel
Insuperable Dany !!
He añadido también al código la siguiente linea que carga el libro de macros personal de Excel:
$oExcel.Run("PERSONAL.XLSB")
Muy agradecido. Seguieré con detalle todas las entradas de este foro y aprendiendo de ello.
He añadido también al código la siguiente linea que carga el libro de macros personal de Excel:
$oExcel.Run("PERSONAL.XLSB")
Muy agradecido. Seguieré con detalle todas las entradas de este foro y aprendiendo de ello.