Dosya ve klasörleri Excel VBA ile özyinelemeli listeleme


Yayın tarihi:

Güncelleme:


Teknik makaleler > Dosya ve klasörleri Excel VBA ile özyinelemeli listeleme

2026 bağlamı ve güvenli kullanım

Sonuç: Her klasörü yinelemeli olarak ziyaret edin, ihtiyacınız olan dosyaları açın ve her alt klasörü aynı prosedüre geri aktarın. Kavşaklar, sembolik bağlantılar, gizli klasörler ve erişim reddedilen yollar için açık hata yönetimi ve politika ekleyin.

Ne öğreneceksiniz

  • FileSystemObject'in klasörleri, alt klasörleri, dosyaları, adları ve yolları nasıl ortaya çıkardığı.
  • Özyinelemenin tam bir ağacı nasıl oluşturduğu ve derin veya döngüsel ağaçların neden korumaya ihtiyaç duyduğu.
  • Büyük ölçekte, yavaş hücre hücre işlemleri olmadan sonuçlar bir çalışma sayfasına nasıl yazılır?

Bu kimin için: Kontrollü bir Windows dizin ağacının envanterini çıkaran Excel kullanıcıları.

2026 bağlamı: Örnek, yazarın orijinal yerel testini yansıtmaktadır. Dizin yapınızın bir kopyasında izinleri ve bağlantı davranışını doğrulayın ve çok büyük veya güvenliğe duyarlı ağaçlar için PowerShell'i veya özel bir envanter aracını düşünün.

Güvenlik notu: Orijinal makaledeki komutlar ve yapılandırma örnekleri mevcut üretim ortamında yeniden çalıştırılmamıştır. Desteklenen sürümleri, yedeklemeleri, erişim kontrollerini ve geri alma adımlarını uygulamadan önce ayrı bir test ortamında doğrulayın.

Başlıca resmî kaynaklar

Genel bakış

VBA (Excel makrosu) kullanarak bir dosya listesinin ve alt klasörler de dahil olmak üzere bir klasör listesinin nasıl alınacağını açıklamaktadır. Bu makale aşağıdaki görevleri programlamak isteyen kişilere yöneliktir

  • Bir klasör altındaki tüm dosya veya klasörlerin tam yollarıyla birlikte bir listesini almak istiyorum.
  • Bir klasörün altındaki dosyalar veya klasörler için bir döngü içinde işlem yapmak istiyorsunuz.

İçindekiler

  1. Programlama yöntemi
  2. Kod Açıklaması.
  3. özet

1. Programlama yöntemi

Referans programlama örnekleri aşağıda verilmiştir.

Function'da oluşturulduğu için, olduğu gibi kopyalanmasını ve yöntem çağrılarının Sub'dan yapılmasını istiyorum.

'Parameter Examples
'## filePath      C:\Users\user\Desktop\test\
'## kind          false:folder, true:file
'## list
Function getFolderOrFile(filePath As String, kind As Boolean, list As Collection) As Collection
 
'delete\
Dim filePathEnd As String
filePathEnd = Right(filePath, 1)
If filePathEnd = "\" Then
  filePath = Left(filePath, Len(filePath) - 1)
End If
 
'Folder existence check
Dim result As String
result = Dir(filePath, vbDirectory)
If result = "" Then
  MsgBox "File does not exist!"
  Exit Function
End If
 
If kind Then
  Dim buf As String
  buf = Dir(filePath & "\*.*")
  Do While buf <> ""
    list.Add filePath & "\" & buf
    buf = Dir()
  Loop
Else
  list.Add filePath
End If
 
Dim folder As Object
With CreateObject("Scripting.FileSystemObject")
  For Each folder In .GetFolder(filePath).SubFolders
    getFolderOrFile folder.Path, kind, list
  Next folder
End With
 
End Function

Kullanmak için aşağıdakileri argüman olarak iletin.

  • filePath: dizin. Örnek.)C:\Users\user\Desktop\test
  • kind: Doğru, yanlış geç. True ise, dosyaların bir listesini döndürür. false ise, klasörlerin bir listesini döndürür.
  • list: Koleksiyon, sonuçları saklamak için kullanılır. Örnek bir uygulama aşağıda verilmiştir.

Gerçek bir Fonksiyon çağrısının örnek bir uygulaması aşağıda gösterilmiştir.

Sub test()
 
Dim list As Collection
Set list = New Collection
getFolderOrFile "C:\Users\user\Desktop\test", False, list
Dim item As Variant
For Each item In list
  '------TODO------
  ThisWorkbook.Worksheets(1).Cells(1, 1).Value = item
Next
 
End Sub

getFolderOrFile çağrısı, bir dosya listesini veya bir klasör listesini listede depolayacaktır. Uygulama örneği False olduğundan klasörlerin listesi saklanır.

For deyimindeki "TODO" bölümünde yapmak istediğiniz işlemi açıklayın. ITEM bir String değişkeni olarak ele alınabilir.

Referans kaynağı, elde edilen listenin Excel'de A1 olarak ayarlanması işlemidir. (İşlem tekrar tekrar aynı hücrenin üzerine yazar.)

2. Kod Açıklaması.

Bu, sistemin nasıl kullanılacağına ilişkin talimatların sonudur ve ardından kodun bir açıklaması gelir.

Ayrıntılar kodda görülebilir, ancak kilit nokta getFolderOrFile yönteminde getFolderOrFile'a yapılan diğer çağrıdır.

Klasörlerin aranması sürecinde, tüm klasörlerin aranması için bir mekanizma olan klasörlerin aranması süreci çağrılarak işlem daha da tekrarlanır.

Kendi yöntemini çağırarak, klasör bulunduğu sürece tüm klasörleri arayarak kendi yöntemini tekrar tekrar çağırır.

3. özet

VBA (Excel makroları) kullanarak alt klasörler de dahil olmak üzere dosyaların ve klasörlerin listesini nasıl alacağınız konusunda yardıma ihtiyacınız varsa, lütfen bu bölüme bakın.

Umarız bu açıklama yararlı olmuştur.