VBA DIR İşlevi - Örneklerle Kolay Açıklama

VBA, Excel'deki otomasyonunuzu bir sonraki düzeye taşıyabilecek bazı yararlı işlevlere sahiptir.

Böyle bir işlev, VBA YÖN işlevi.

Kendi başına olsa da, belirli bir şeyi yapan basit bir işlev gibi görünebilir.

Ancak, onu VBA kodlama dilinin diğer bazı yararlı öğeleriyle birleştirdiğinizde, güçlü şeyler oluşturabilirsiniz (bu eğitimin ilerleyen kısımlarındaki örneklerde ele alınacaktır).

VBA Dir İşlevi Ne Yapar?

Yol adlarını kullanarak dosyanın veya klasörün adını almak istediğinizde VBA DIR işlevini kullanın.

Size bir örnek vermek gerekirse, bir klasörde bir Excel dosyanız varsa, o Excel dosyasının (veya başka bir dosya türünün) adını almak için VBA DIR işlevini kullanabilirsiniz.

Klasördeki tüm Excel dosyalarının (veya tüm dosyaların - Excel dosyası olsun veya olmasın) adlarını almak istersem ne olur?

Bunu da yapabilirsiniz!

DIR işlevini bir kez kullandığınızda, ilk dosya adı bir klasörde. Şimdi, ikinci, üçüncü, dördüncü dosyaların adlarını da almak istiyorsanız, DIR işlevini tekrar kullanabilirsiniz (daha sonra örnek olarak ele alınacaktır).

Yön yol adıyla eşleşen ilk dosya adını döndürür. Yol adıyla eşleşen ek dosya adlarını almak için arayın Yön yine hiçbir argüman olmadan. Daha fazla dosya adı eşleşmediğinde, Yön sıfır uzunlukta bir dize (“”) döndürür. Bu öğreticide daha sonra Örnek 3 ve 4'te ele alınmıştır.

VBA DIR İşlevinin Sözdizimi

Dir [ (yol adı [ , nitelikler ] ) ]
  • yol adı: Bu isteğe bağlı bir argümandır. Bu dosya adı, klasör adı veya dizin adı olabilir. Yol adı bulunamazsa, VBA DIR işlevi sıfır uzunluklu bir dize (“”) döndürür
  • Öznitellikler: Bu isteğe bağlı bir argümandır. Bazı öznitelikleri belirtmek için bu argümanı kullanabilirsiniz ve DIR işlevi bu özniteliklere dayalı olarak dosya adlarını döndürür. Örneğin, tüm gizli dosyaların veya salt okunur dosyaların (özniteliği olmayan dosyalarla birlikte) bir listesini istiyorsanız, bunu bu bağımsız değişkende belirtmeniz gerekir.

VBA DIR işlevinde kullanılabilen öznitelikler (bunlardan birini veya birkaçını kullanabilirsiniz):

Devamlı Değer Tanım
vbNormal 0 (Varsayılan) Özniteliği olmayan dosyaları belirtir.
vbReadOnly 1 Özniteliği olmayan dosyalara ek olarak salt okunur dosyaları belirtir.
vbGizli 2 Özniteliği olmayan dosyalara ek olarak gizli dosyaları belirtir.
VbSistem 4 Özniteliği olmayan dosyalara ek olarak sistem dosyalarını belirtir. Macintosh'ta mevcut değildir.
vbVolume 8 Birim etiketini belirtir; başka bir atfedilen belirtilirse, vbVolume yoksayılır. Macintosh'ta mevcut değildir.
vbDirectory 16 Özniteliği olmayan dosyalara ek olarak dizinleri veya klasörleri belirtir.
vbAlias 64 Belirtilen dosya adı bir diğer addır. Yalnızca Macintosh'ta kullanılabilir.

DIR İşleviyle Joker Karakterleri Kullanma

Windows ile çalışıyorsanız, DIR işlevinde joker karakterleri de kullanabilirsiniz.

Macintosh'ta VBA ile çalışırken bunları kullanamayacağınızı unutmayın.

Joker karakterlerin kullanılması şu durumlarda faydalı olabilir:

  • Belirli bir dosya türünün (.XLSX veya .PPTX gibi) dosya adlarını almak istiyorsunuz.
  • Dosya adlarında belirli bir sonek/önek varsa ve bu dosyaların/klasörlerin/dizinlerin adlarını almak istediğinizde. Örneğin, içinde 2021-2022 öneki olan tüm dosyaların adlarını istiyorsanız, bunu joker karakterler kullanarak yapabilirsiniz.

Excel'de üç joker karakter vardır:

  1. * (yıldız) - Herhangi bir sayıda karakteri temsil eder. Örneğin, 2019* size içinde 2021-2022 öneki olan tüm dosyaların adlarını verirdi.
  2. ? (soru işareti) - Tek bir karakteri temsil eder. Örneğin, 2021-2022? 2021-2022 ile başlayan ve adında bir karakter daha olan tüm dosyaların adlarını verirdi (2021-2022A,2021-2022B,2021-2022C vb. gibi)

Not: Bir joker karakter daha vardır - tilde (~). Çok kullanılmadığı için açıklamasını atladım. İlgileniyorsanız burada daha fazlasını okuyabilirsiniz.

VBA DIR İşlevi - Örnekler

Şimdi, VBA DIR işlevini kullanmanın bazı örneklerini görelim ve görelim.

Örnek 1 - Dosya Adının Yolundan Alınması

Bir dosyanın yoluna sahip olduğunuzda, dosyanın adını ondan almak için DIR işlevini kullanabilirsiniz.

Örneğin, aşağıdaki kod dosyanın adını döndürür ve bir mesaj kutusunda gösterir.

Sub GetFileNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx") MsgBox DosyaAdı End Sub

Yukarıdaki kod, DIR işlevi tarafından döndürülen dosya adını depolamak için bir 'DosyaAdı' değişkeni kullanır. Daha sonra dosya adını görüntülemek için bir mesaj kutusu kullanır (aşağıda gösterildiği gibi).

Ve dosya mevcut olmadığında ne olur?

Bu durumda, DIR işlevi boş bir dize döndürür.

Aşağıdaki kod, dosyanın var olup olmadığını kontrol etmek için If Then Else ifadesini kullanır. Dosya mevcut değilse, “Dosya Mevcut Değil” metnini içeren bir mesaj kutusu gösterir, aksi takdirde dosya adını gösterir.

Sub CheckFileExistence() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\Excel File A.xlsx") Eğer DosyaAdı "" ise MsgBox DosyaAdı Başka MsgBox "Dosya Yok" End If End Alt

Örnek 2 - Bir Dizinin Var olup olmadığını kontrol edin (ve yoksa oluşturun)

Aşağıdaki kod, 'Test' klasörünün var olup olmadığını kontrol eder.

Klasörün var olması veya olmaması durumunda bir mesajı göstermek için bir mesaj kutusu kullanılır.

Sub CheckDirectory() Dim PathName As String Dim CheckDir As String PathName = "C:\Users\sumit\Desktop\Test" CheckDir = Dir(PathName, vbDirectory) Eğer CheckDir "" O zaman MsgBox CheckDir & "varsa" Başka MsgBox "Dizin mevcut değil" End If End Sub

Klasörün var olup olmadığını kontrol etmek için bu kodu daha da hassaslaştırabilirsiniz ve yoksa, o klasörü oluşturmak için VBA'yı kullanabilirsiniz.

Aşağıdaki kodu kullanan kod MkDir işlevi mevcut olmaması durumunda bir klasör oluşturmak için.

Sub CreateDirectory() Dim PathName As String Dim CheckDir As String PathName = "C:\Users\sumit\Desktop\Test" CheckDir = Dir(PathName, vbDirectory) Eğer CheckDir "" O zaman MsgBox CheckDir & " klasörü var" Else MkDir PathName MsgBox "Adıyla bir klasör oluşturuldu" & CheckDir End If End Sub

Örnek 3 - Bir Dizindeki Tüm Dosya ve Klasörlerin Adlarını Alın

Bir dizindeki tüm dosya ve klasör adlarının bir listesini almak istiyorsanız, DIR İşlevini kullanabilirsiniz.

Aşağıdaki kod, Test klasöründeki (C:\Users\sumit\Desktop\Test\ yolunda bulunan) tüm dosya ve klasör adlarını listeler.

Hemen penceresinde adları göstermek için Debug.Print kullanıyorum. Bunu, bir ileti kutusundaki veya Excel'deki bir sütundaki adları listelemek için de kullanabilirsiniz.

Sub GetAllFile&FolderNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\", vbDirectory) Do while FileName "" Debug.Print FileName FileName = Dir() Loop End Sub

Yukarıdaki koddaki Do while döngüsü, verilen yoldaki tüm dosya ve klasörler kaplanana kadar devam eder. Kapsanacak başka dosya/klasör kalmadığında, DosyaAdı boş bir dize olur ve döngü durur.

Örnek 4 - Bir Klasördeki Tüm Dosyaların Adlarını Alın

Bir klasör/dizindeki tüm dosyaların adlarını (alt klasörlerin adlarını değil) almak için aşağıdaki kodu kullanabilirsiniz.

Sub GetAllFileNames() Dim FileName As String FileName = Dir("C:\Users\sumit\Desktop\Test\") Do while FileName "" Debug.Print DosyaAdı DosyaAdı = Dir() Döngü End Sub

Bu kod, küçük bir farkla, Örnek 3'te kullanılan kod gibidir.

Bu kodda belirtmedim vbDirectory DIR işlevinde. vbDirectory'yi belirttiğinizde, size klasörlerin yanı sıra tüm dosyaların adlarını verecektir.

vbDirectory belirtmezseniz, DIR işlevi size yalnızca dosyaların adlarını verir.

Not: Ana klasördeki ve alt klasörlerdeki tüm dosyaların isimlerini almak istiyorsanız, DIR işlevini kullanamazsınız (özyinelemeli olmadığı için). Bunu yapmak için Power Query'yi (kodlama gerekmez) kullanabilir veya VBA'da Dosya Sistemi Nesnesini (özyinelemeli) kullanabilirsiniz.

Örnek 5 - Bir Klasördeki Tüm Alt Klasörlerin Adlarını Alın

Aşağıdaki kod, belirtilen klasör içindeki tüm alt klasörlerin adlarını verecektir.

kullanır GetAtr işlevi DIR işlevi tarafından döndürülen adın bir dosya veya klasör/dizin adı olup olmadığını kontrol etmemizi sağlayan VBA'da.

Sub GetSubFolderNames() DosyaAdı As String Dim PathName As String PathName = "C:\Users\sumit\Desktop\Test\" FileName = Dir(PathName, vbDirectory) Do while FileName "" If GetAttr(PathName & FileName) = vbDirectory Debug.Print DosyaAdı End If FileName = Dir() Döngü End Sub

Yine, adları hemen pencerede almak için Debug.Print kullanıyorum. Bunları bir mesaj kutusunda veya Excel'de (kodu uygun şekilde değiştirerek) alabilirsiniz.

Örnek 6 - Bir Klasörden İlk Excel Dosyasını Alın

DIR işlevi ile, döndürülen dosya adında dosya uzantısını veya istediğiniz herhangi bir sonek/ön eki belirtebilirsiniz.

Aşağıdaki kod, Test klasöründeki ilk Excel dosyasının adını görüntüler.

Sub GetFirstExcelFileName() Dim Dosya Adı As String Dim PathName As String PathName = "C:\Users\sumit\Desktop\Test\" DosyaAdı = Dir(YolAdı & "*.xls*") MsgBox DosyaAdı End Sub

*.xls* (her iki tarafta da yıldız işareti) kullandığımı unutmayın. Bu, Excel dosyalarının tüm sürümlerinin (.xls, xlsx, .xlsm, .xlsb) denetlenmesini sağlayacaktır.

Örnek 7 - Bir Klasördeki Tüm Excel Dosyalarının Adlarını Alın

Test klasöründeki tüm Excel dosyalarının adlarını almak için aşağıdaki kodu kullanın.

Sub GetAllFileNames() Klasör Adını Dize Dim Dim DosyaAdı As Dize Dim KlasörAdı = "C:\ = Dir() Döngü End Sub

DIR işlevi yalnızca ilk Excel dosyasının adını döndürürken, onu döngüde tekrar çağırdığımız için tüm dosyaları gözden geçirir ve bize tüm Excel dosyalarının adlarını verir.

Umarım bu öğreticiyi ve örnekleri faydalı bulmuşsunuzdur.

Yorumlar bölümünde düşüncelerinizi bana bildirin.

wave wave wave wave wave