Ejecutar macro de Excel en varios archivos

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?

preguntado el 22 de mayo de 12 a las 20:05

Puede poner todos los archivos de datos en una carpeta y luego usar Dir() para recorrerlos, abrir cada uno y ejecutar la macro. -

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í. -

5 Respuestas

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

Dos posibles soluciones a continuación,

  1. que se puede ejecutar directamente como un archivo vbs
  2. A solución que se ejecutará desde Excel (según la sugerencia de Tim Williams)

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

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

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

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

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 or haz tu propia pregunta.