Вопрос по excel, excel-vba, powershell, vbscript, vba – Выполнить макрос Excel для нескольких файлов

3

У меня есть макрос Excel, сохраненный в пустой книге и нескольких книгах данных.

В настоящее время я открываю файл макроса и каждый файл данных по отдельности, запуская макрос на каждом с помощью сочетания клави

Есть ли способ запустить макрос во всех книгах данных, не открывая их, либо с помощью

пакетный файл, VBA / VBScript, PowerShell, или что-то похожее?
Вы можете поместить все файлы данных в папку, а затем использовать Dir () для их циклического открытия, открывая каждый из них и запуская макрос. Tim Williams
Спасибо всем, решение, которое я использовал, было комбинацией использования файла PERSONAL.XLSB (о котором я ничего не знал до того, как он был упомянут) и найденного учебника по сценариям powershellВо. Jonathan

Ваш Ответ

5   ответов
3

тот файл будет загружаться в фоновом режиме при каждом запуске Excel. Первоначально файл PERSONAL.XLSB НЕ будет там. Чтобы автоматически создать этот файл, просто начните запись «фиктивного» макроса (с кнопкой записи в левой нижней части электронной таблицы) и выберите «Персональную макрокоманду», чтобы сохранить его. После записи макроса вы можете открыть VBA. редактор с помощью [Alt] + [F10], и вы увидите файл PERSONAL.XLSB с макросом «dummy». Я использую этот файл для хранения множества общих макросов, которые всегда доступны. Я добавил эти макросы в свою ленту меню. Одним из недостатков этого общего файла макроса является то, что, если вы запускаете более одного экземпляра Excel, вы получите сообщение об ошибке, что файл PERSONAL.XLSB уже используется экземпляром Excel Nr. 1. Это не проблема, если вы не добавляете новые макросы в данный момент.

i Роберт, если у меня есть 2 или более ПК с превосходным сервером, как я могу это сделать? Simone Pistecchia
Когда каждый пользователь создает свой собственный экземпляр этого единственного исполняемого файла Excel, вы получите «PERSONAL.xlsb заблокирован для редактирования». В идеале Microsoft должна была поместить этот файл не в каталог программ, а в каталог пользователей. Не уверены, что вы можете настроить Excel для чтения файла personal.xlsb из каталога пользователей? Robert Ilbrink
2

VBScript который может быть запущен непосредственно как файл VBSA @ У решение для запуска из Excel (согласно предложению Тима Уильямса)

VBScript решени

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

@ У решени

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
1

может быть, очень поздно, но для всех будущих поисков. Вы можете запустить ваш макрос, создав файл .vbs. Для этого откройте блокнот и добавьте следующее:

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

сохраните файл следующим образом («ваше имя файла» .vbs)

Двойным щелчком (открытием) сохраненного.vbs file, он запустит ваш макрос без необходимости открывать файл Excel.

Надеюсь это поможет

0

ле, просмотреть рабочие книги с помощью vba и активировать их перед запуском макроса. Насколько я знаю, вам все равно придется открыть их с помощью VBA.

Ты можешь использовать что-то вроде этого:

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
0

Другой путь

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

Похожие вопросы