2016-04-13 14 views
0

Oluşturmaya çalıştığım bir makroyla ilgili yardımlarınız için çok teşekkür ederim.Diğer çalışma kitaplarından makroları çalıştırmak için döngü

ben şöyle görünen bir yol vardır: K:\XXX\XXX\XXX\Module 1

Module 1 bir sayı ile adlandırılmış xlsm dosyaları bir demet içeren bir klasördür (yani 100.xlsm, 110.xlsm ve benzeri)

Ben

istiyorum Bir döngü oluşturmak için:

  1. Makroyu çalışma kitabında çalıştırır 100.xlsm;
  2. Makro çalışırken, 100.xlsm ("farklı kaydet") kaydeder;
  3. Kaydedilen xlsm'u kapatır, bir sonraki dosyaya geçer (örn. 110.xlsm) ve aynı adımları tekrarlar.

Döngüyü çalıştırmadan önce, bu xlsm dosyalarının adlarını saklayan bir deyim oluşturmak istiyorum.

Aşağıdaki makro size neyin peşindeyim olduğuna dair bir fikir verebilir. Gerçekten birkaç hata var.

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 

cevap

0

Aşağıdaki kodun sizin yapmak istediğiniz şeyi gerçekleştireceği gibi olacağını düşünüyorum.

Kodun, önce makrosunu çalıştırmak istediğiniz çalışma kitabını açtığını unutmayın. Daha sonra bu açık çalışma kitabındaki makroyu, orijinal çalışma kitabınızdan Application.Run() komutuyla çalıştırabilirsiniz.

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

İkinci örnek, bir dize paramater ve bir tamsayı parametresi gerektiren bir makroyu çağırır. Aşağıdaki örnek, 100.xlsm, 110.xlsm, vb. Adlı bazı özel çalışma kitaplarını açar ve her birinde SayHelloMessage adı verilen bir makroyu çalıştırır. Umarım bu yardımcı olur.

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 
İlgili konular