Klasördeki Ses Dosyalarının Toplam Süresini Bul - Microsoft Excel


Bir klasör içinde bulunan ses dosyalarının toplam sayısını ve süresini veren alternatif bir makro kodudur.

Kod


Option Explicit

Sub KlasordekiSesDosyalarininToplamSuresiniBul()
    '--------------------------------------------------
    'Değişkenler
    '--------------------------------------------------
    Dim objShell            As Object
    Dim objKlasor           As Object
    Dim objKlasorOge        As Object
    Dim klasor              As Variant
    Dim klasor_yolu         As String
    Dim i                   As Integer
    Dim toplam_dosya_sayisi As Integer
    Dim toplam_sure         As Date
    
    '--------------------------------------------------
    'Alan Temizleme
    '--------------------------------------------------
    Columns("A:B").Clear
    Range("A1").Select
    
    '--------------------------------------------------
    'Hazırlık
    '--------------------------------------------------
    klasor = "C:\arsiv\ses-dosyalari"
    klasor_yolu = Dir$(klasor & "\*.*")
    
    Set objShell = CreateObject("Shell.Application")
    Set objKlasor = objShell.Namespace(klasor)
    
    i = 0
    toplam_sure = 0
    
    '--------------------------------------------------
    'Listeleme
    '--------------------------------------------------
    Do While klasor_yolu <> ""
        ActiveCell.Offset(i, 0) = klasor_yolu
        Set objKlasorOge = objKlasor.ParseName(klasor_yolu)
        
        ActiveCell.Offset(i, 1) = objKlasor.GetDetailsOf(objKlasorOge, 27)
        toplam_sure = toplam_sure + ActiveCell.Offset(i, 1)
        
        i = i + 1
        klasor_yolu = Dir$()
    Loop
    
    '--------------------------------------------------
    'Bilgilendirme
    '--------------------------------------------------
    ActiveCell.Offset(i + 1, 0) = "Toplam Dosya Sayısı = " & i
    ActiveCell.Offset(i + 1, 1) = "Toplam Süre = " & toplam_sure
    ActiveCell.Offset(i + 1, 1) = Format(ActiveCell.Offset(i + 1, 1), "ss:dd:nn")
    
    '--------------------------------------------------
    'Değişken Temizleme
    '--------------------------------------------------
    Set objKlasorOge = Nothing
    Set objKlasor = Nothing
    Set objShell = Nothing
End Sub

Kod (Açıklamalı)


Option Explicit

Sub KlasordekiSesDosyalarininToplamSuresiniBul()

    '--------------------------------------------------
    'Shell.Application nesnesi oluşturmak
    've buradan klasör ayarını yapmak
    'için kullanılacak olan değişken.
    '--------------------------------------------------
    Dim objShell            As Object
    
    '--------------------------------------------------
    'Bunu da ilgili klasördeki dosyalardan
    'bilgi çekmek için kullanacağız. Ana
    'klasörümüzü ayarlıyoruz bu değişkenle.
    '--------------------------------------------------
    Dim objKlasor           As Object
    
    '--------------------------------------------------
    'Klasörün içindeki dosyalara
    'ulaşmak ve bilgi çekmek için
    'kullanacağımız değişken.
    '--------------------------------------------------
    Dim objKlasorOge        As Object
    
    '--------------------------------------------------
    'Klasörümüzün yolunu bu değişkene ekliyoruz.
    'String ifade girişi yapıyoruz.
    '--------------------------------------------------
    Dim klasor              As Variant
    
    '--------------------------------------------------
    'klasor değişkenindeki değere göre
    'kod çalıştıracağız ve sonucu bu
    'değişkene atayacağız.
    '--------------------------------------------------
    Dim klasor_yolu         As String
    
    '--------------------------------------------------
    'Döngü için kullanılacak değişken.
    '--------------------------------------------------
    Dim i                   As Integer
    
    '--------------------------------------------------
    'Raporlama için toplam dosya sayısını tutan değişken.
    '--------------------------------------------------
    Dim toplam_dosya_sayisi As Integer
    
    '--------------------------------------------------
    'Raporlama için süre bilgisini tutan değişken.
    '--------------------------------------------------
    Dim toplam_sure         As Date
    
    '--------------------------------------------------
    'İlk önce temizliğimizi güzelce yapıyoruz.
    'Yeniden çalıştırdığımızda karışıklık
    'olmasının önüne geçmiş bulunuyoruz böylelikle.
    '--------------------------------------------------
    Columns("A:B").Clear
    Range("A1").Select
    
    '--------------------------------------------------
    'Değişkenlere gerekli atamaları yapıyoruz.
    '--------------------------------------------------
    klasor = "C:\arsiv\ses-dosyalari"
    klasor_yolu = Dir$(klasor & "\*.*")
    
    Set objShell = CreateObject("Shell.Application")
    Set objKlasor = objShell.Namespace(klasor)
    
    i = 0
    toplam_sure = 0
    
    '--------------------------------------------------
    'Klasördeki tüm dosyaları incele.
    'Tüm dosyalar incelenene kadar
    'döngü devam etsin, aksi halde dursun.
    '--------------------------------------------------
    Do While klasor_yolu <> ""
        
        '--------------------------------------------------
        'A sütunundaki son boş hücreye dosya
        'ismini aşağıdaki kodlar aracılığıyla
        'yazdırıyoruz.
        '--------------------------------------------------
        ActiveCell.Offset(i, 0) = klasor_yolu
        Set objKlasorOge = objKlasor.ParseName(klasor_yolu)
        
        '--------------------------------------------------
        'A sütunundaki son boş hücreye dosya
        'süresini aşağıdaki kodlar aracılığıyla
        'yazdırıyoruz. 27 sayısı süreyi veriyor ama
        'bu sanırım dosyadan dosyaya değişebiliyor.
        'Parametre listesini döngüyle yazdırabilir
        've buna göre size uygun parametrenin sayısını
        'seçebilirsiniz.
        '--------------------------------------------------
        ActiveCell.Offset(i, 1) = objKlasor.GetDetailsOf(objKlasorOge, 27)
        toplam_sure = toplam_sure + ActiveCell.Offset(i, 1)
        
        i = i + 1
        klasor_yolu = Dir$()
    Loop
    
    '--------------------------------------------------
    'Burada da toplam dosya sayısını
    've toplam süre bilgisini A ve B
    'sütunlarındaki verinin sonuna yazdırdık.
    '--------------------------------------------------
    ActiveCell.Offset(i + 1, 0) = "Toplam Dosya Sayısı = " & i
    ActiveCell.Offset(i + 1, 1) = "Toplam Süre = " & toplam_sure
    ActiveCell.Offset(i + 1, 1) = Format(ActiveCell.Offset(i + 1, 1), "ss:dd:nn")
    
    '--------------------------------------------------
    'Değişken temizliği yapıyoruz.
    '--------------------------------------------------
    Set objKlasorOge = Nothing
    Set objKlasor = Nothing
    Set objShell = Nothing
End Sub

Etiketler
microsoft excel açıklamalı içerik microsoft excel vba