• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Klasördeki kapalı excel dosyaların hepsinde makro çalıştırma

Katılım
5 Eylül 2013
Mesajlar
29
Excel Vers. ve Dili
2016 Türkçe
Merhaba

Bir klasör içindeki kapalı durumda olan excel dosyalarında belirli bir makro çalıştırmak istiyorum.
Bu makro bazen değişebiliyor bu yüzden kapalı dosyarın hepsinde yazdığım makronun çalışması için
yardımcı olabilirseniz sevinirim.

Örnek

sub kapalımakro ()
.
.
.
.
çalışacak makro
.
.
.
end sub
 
Bunun için kapalı dosyaları açmanız gerekecektir.
 
Deneyiniz.

Kendinize uyarlamanız gerekebilir.

C++:
Option Explicit

Sub Klasor_Altındaki_Dosyalarda_Makro_Calistir()
    Dim K1 As Workbook, K2 As Workbook, S1 As Worksheet, Zaman As Double
    Dim Hedef_Dosya As Variant, Makrolu_Dosya As Variant, X As Integer
   
    Makrolu_Dosya = Application.GetOpenFilename(FileFilter:="Excel Dosyası, *.xls; *.xlsb; *.xlsm", MultiSelect:=False)
   
    If Makrolu_Dosya = False Then
        MsgBox "İşleme devam edebilmeniz için makro içeren dosyanızı seçmelisiniz!", vbCritical
        Exit Sub
    End If
   
    Hedef_Dosya = Application.GetOpenFilename(FileFilter:="Excel Dosyası, *.xls; *.xlsb; *.xlsx; *.xlsm", MultiSelect:=True)
   
    If IsArray(Hedef_Dosya) = False Then
        MsgBox "İşleme devam edebilmeniz için makronun çalıştırılacağı dosyaları seçmelisiniz!", vbCritical
        Exit Sub
    End If
   
    Zaman = Timer
   
    Application.ScreenUpdating = 0
    Application.Calculation = -4135
   
    Set K1 = Workbooks.Open(Makrolu_Dosya)
   
    For X = LBound(Hedef_Dosya) To UBound(Hedef_Dosya)
        Set K2 = Workbooks.Open(Hedef_Dosya(X))
        Set S1 = K2.Sheets("Sheet1")
       
        Application.Run "'" & K1.FullName & "'!Makronuzun_Adi"
                
        K2.Close True
    Next
   
    K1.Close False
    
    Set K1 = Nothing
    Set K2 = Nothing
    Set S1 = Nothing
   
    Application.Calculation = -4105
    Application.ScreenUpdating = 1
   
    MsgBox "İşleminiz tamamlanmıştır." & vbLf & vbLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 
Kapalı dosyadan veri alarak sorunu çözebilirsiniz. Ayrıca makro çalıştırmaya gerek olmayabilir.
 
Deneyiniz.

Kendinize uyarlamanız gerekebilir.

C++:
Option Explicit

Sub Klasor_Altındaki_Dosyalarda_Makro_Calistir()
    Dim K1 As Workbook, K2 As Workbook, S1 As Worksheet, Zaman As Double
    Dim Hedef_Dosya As Variant, Makrolu_Dosya As Variant, X As Integer
  
    Makrolu_Dosya = Application.GetOpenFilename(FileFilter:="Excel Dosyası, *.xls; *.xlsb; *.xlsm", MultiSelect:=False)
  
    If Makrolu_Dosya = False Then
        MsgBox "İşleme devam edebilmeniz için makro içeren dosyanızı seçmelisiniz!", vbCritical
        Exit Sub
    End If
  
    Hedef_Dosya = Application.GetOpenFilename(FileFilter:="Excel Dosyası, *.xls; *.xlsb; *.xlsx; *.xlsm", MultiSelect:=True)
  
    If IsArray(Hedef_Dosya) = False Then
        MsgBox "İşleme devam edebilmeniz için makronun çalıştırılacağı dosyaları seçmelisiniz!", vbCritical
        Exit Sub
    End If
  
    Zaman = Timer
  
    Application.ScreenUpdating = 0
    Application.Calculation = -4135
  
    Set K1 = Workbooks.Open(Makrolu_Dosya)
  
    For X = LBound(Hedef_Dosya) To UBound(Hedef_Dosya)
        Set K2 = Workbooks.Open(Hedef_Dosya(X))
        Set S1 = K2.Sheets("Sheet1")
      
        Application.Run "'" & K1.FullName & "'!Makronuzun_Adi"
               
        K2.Close True
    Next
  
    K1.Close False
   
    Set K1 = Nothing
    Set K2 = Nothing
    Set S1 = Nothing
  
    Application.Calculation = -4105
    Application.ScreenUpdating = 1
  
    MsgBox "İşleminiz tamamlanmıştır." & vbLf & vbLf & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub

Yardımınız için çok teşekkür ederim. İyi günler
 
Geri
Üst