2016-04-13 2 views
0

Я бы очень признателен за вашу помощь с макросом, который я пытаюсь создать.Loop для запуска макросов из других книг

У меня есть путь, который выглядит следующим образом: K:\XXX\XXX\XXX\Module 1

Module 1 папка, которая содержит кучу xlsm файлов с именем с номером (т.е. 100.xlsm, 110.xlsm, и так далее)

Я хотел бы для создания петли, которая:

  1. Выполняет макрос в рабочей книге 100.xlsm;
  2. Сохраняет 100.xlsm (НЕ «сохранять как»), когда макрос выполняется;
  3. Закрывает сохраненный xlsm, переходит к следующему файлу (то есть 110.xlsm) и повторяет те же шаги.

Перед запуском цикла я хотел бы создать инструкцию, в которой хранятся имена тех файлов xlsm.

Макрос ниже может дать вам представление о том, чем я занимаюсь. Есть действительно несколько ошибок.

Sub update() 

Dim path As String path = "K:\XXX\XXX\XXX\Module 1" 

Dim list() As Integer 
List=(100, 110, 137, 140) 

For Each n As Integer In list 

    Application.Run (path & "\" &n.xslm!refresh) 
    Save WORKBOOK 
    Close WORKBOOK 

Next 

End Sub 

ответ

0

Я думаю, что что-то вроде кода ниже достигнет того, что вы хотите сделать.

Обратите внимание, что код сначала открывает книгу, макрос которой вы хотите запустить. Затем вы можете запустить макрос в этой открытой книге из своей оригинальной книги с помощью команды Application.Run(), например.

Application.Run("book1.xlsm!mymacro"), or 
result = Application.Run("book1.xlsm!mymacro", "Hello", 20) 

Второй пример вызывает макрос, для которого требуется строковый параметр и целочисленный параметр.

В более полном примере ниже раскрываются некоторые конкретные книги под названием 100.xlsm, 110.xlsm и т. Д., А затем выполняется макрос в каждом из них, называемом SayHelloMessage. Надеюсь, это поможет.

Sub RunMacrosInOtherWorkbooks() 

    Dim wbpath As String   'path where the workbooks containing the macros you want to run are saved 
    Dim wbnames() As String  'array containing names of workbooks whose macros you want to run 
    Dim wbTarget As Workbook  'current workbook who macro is being run 
    Dim macroname As String  'name of macro being run 

    wbpath = "C:\Test" 
    wbnames() = Split("100.xlsm,110.xlsm,137.xlsm,140.xlsm", ",") 'Just one way of creating the list of workbooks. 
    macroname = "SayHelloMessage" 

    Dim i As Integer 
    Dim result As Variant 
    For i = 0 To UBound(wbnames) 
     Set wbTarget = Workbooks.Open(wbpath & "\" & wbnames(i)) 
     result = Application.Run(wbTarget.Name & "!" & macroname) 
     ' result = Application.Run(wbTarget.Name & "!" & macroname, 76) 'calling a subroutine or function with an argument. You need something to catch a return code 
     wbTarget.Save 
     wbTarget.Close 
    Next 

End Sub 
Смежные вопросы