Ejecutar macro de Excel en varios archivos
Frecuentes
Visto 19,034 veces
3
Tengo una macro de Excel guardada en un libro de trabajo en blanco y varios libros de trabajo de datos.
Actualmente abro el archivo de macro y cada archivo de datos individualmente, ejecutando la macro en cada uno con un atajo de teclado.
¿Hay alguna manera de ejecutar la macro en todos los libros de trabajo de datos sin abrirlos, ya sea con
- un archivo por lotes,
- VBA/VBScript,
- potencia Shell,
- ¿o algo similar?
5 Respuestas
3
Una forma de hacer esto es agregar sus macros al archivo PERSONAL.XLSB. Este archivo se cargará en segundo plano cada vez que inicie Excel. Inicialmente, el archivo PERSONAL.XLSB NO estará allí. Para crear automáticamente este archivo, simplemente comience a grabar una macro "ficticia" (con el botón de grabación en la parte inferior izquierda de una hoja de cálculo) y seleccione "Libro de trabajo de macros personal" para almacenarlo. Después de grabar su macro, puede abrir el VBA editor con [Alt]+[F10] y verá el archivo PERSONAL.XLSB con la macro "ficticia". Uso este archivo para almacenar montones de macros generales que siempre están disponibles. He agregado estas macros a mi propia cinta de menú. Una desventaja de este archivo de macro común es que si inicia más de una instancia de Excel, recibirá un mensaje de error que indica que el archivo PERSONAL.XLSB ya está en uso por la instancia de Excel Nr. 1. Esto no es un problema siempre y cuando no agregue nuevas macros en este momento.
contestado el 23 de mayo de 12 a las 09:05
Robert, si tengo 2 o más PC, con Excel en el servidor, ¿cómo puedo hacer esto? - Simone Pistecchia
Cuando cada usuario crea su propia instancia de este único ejecutable de Excel, obtendrá el mensaje "PERSONAL.xlsb está bloqueado para editar". Idealmente, Microsoft no debería haber colocado este archivo en el directorio de programas, sino en el directorio de usuarios. ¿No está seguro de poder configurar Excel para leer el archivo personal.xlsb del directorio de usuarios? - Roberto Ilbrink
2
Dos posibles soluciones a continuación,
- VBScript que se puede ejecutar directamente como un archivo vbs
- A Español solución que se ejecutará desde Excel (según la sugerencia de Tim Williams)
VBScript solución
Dim objFSO
Dim objFolder
Dim objFil
Dim objXl
Dim objWb
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
Set objFSO = CreateObject("scripting.filesystemobject")
Set objFolder = objFSO.getfolder("c:\temp")
For Each objFil In objFolder.Files
If InStr(objFil.Type, "Excel") > 0 Then
Set Wb = objExcel.Workbooks.Open(objFil.Path)
wscript.echo Wb.name
Wb.Close False
End If
Next
Español solución
Sub OpenFilesVBA()
Dim Wb As Workbook
Dim strFolder As String
Dim strFil As String
strFolder = "c:\Temp"
strFil = Dir(strFolder & "\*.xls*")
Do While strFil <> vbNullString
Set Wb = Workbooks.Open(strFolder & "\" & strFil)
Wb.Close False
strFil = Dir
Loop
End Sub
contestado el 23 de mayo de 12 a las 08:05
1
Me tropecé con tu publicación hace un momento, tal vez muy tarde, pero para todas las búsquedas futuras. Es posible iniciar su macro creando un archivo .vbs. Para hacer esto, abra el bloc de notas y agregue lo siguiente:
objExcel = CreateObject("Excel.Application")
objExcel.Application.Run <insert macro workbook file path, module and macro name here>
objExcel.DisplayAlerts = False
objExcel.Application.Save
objExcel.Application.Quit
Set objExcel = Nothing
guarde el archivo de la siguiente manera ("su nombre de archivo".vbs)
Al hacer doble clic (abrir) el guardado .vbs
archivo, iniciará su macro sin que tenga que abrir su archivo de Excel.
Espero que esto ayude.
Respondido el 27 de Septiembre de 17 a las 20:09
0
Puede mantener la macro en su archivo personal.xls, o en un archivo maestro, recorrer los libros de trabajo con vba y activarlos antes de ejecutar su macro. Sin embargo, hasta donde yo sé, todavía tienes que abrirlos con vba.
Podrías usar algo como esto:
sub LoopFiles
Dim sFiles(1 to 10) as string 'You could also read this from a range in a masterfile
sFiles(1) = "Filename1.xls"
.
.
sFiles(10) = "Filename10.xls"
Dim wb as Workbook
Dim iCount as integer
iCount = ubound(sFiles)
Dim iCount2 as integer
For iCount2 = 1 to iCount
Workbooks(sFiles(iCount2)).open
Workbooks(sFiles(iCount2)).activate
Call YourMacro
Workbooks(sFiles(iCount2)).close
next iCount2
end sub
contestado el 22 de mayo de 12 a las 20:05
0
Otra manera,
Sub LoopAllWorkbooksOpened()
Dim wb As Workbook
For Each wb In Application.Workbooks
Call YourMacroWithWorkbookParam(wb)
Next wb
End Sub
Sub YourMacroWithWorkbookParam(wb As Workbook)
MsgBox wb.FullName
End Sub
contestado el 23 de mayo de 12 a las 00:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas excel powershell vbscript vba or haz tu propia pregunta.
Puede poner todos los archivos de datos en una carpeta y luego usar Dir() para recorrerlos, abrir cada uno y ejecutar la macro. - Tim Williams
Gracias a todos, la solución que utilicé fue una combinación del uso del archivo PERSONAL.XLSB (del cual no sabía nada antes de que se mencionara) y un tutorial de script de PowerShell encontrado aquí. - Jonathan
Posible duplicado de Ejecute la misma macro de Excel en varios archivos de Excel - jww