DIR, VBA'da Dizin anlamına gelir. VBA DIM İşlevi, belirli bir klasörden veya yol adından bir dosya almamızı sağlayan yerleşik bir VBA işlevidir. Örneğin, klasörlerden birinde "Sales Report.xlsx" adlı bir Excel dosyamız varsa, VBA DIR İşlevine erişebiliriz.
Aynı klasörde birden fazla dosya olması durumunda, tüm dosya adlarını anında almak için döngülerle VBA DIR işlevini kullanırız. Sadece tüm dosyaları değil, 3. dosyayı, 4. dosyayı vb. de alabiliriz. Örneğin, aşağıdaki görüntüye bakın.

Bu konum yolundan “data.xlsx” adlı dosyayı almamız gerektiğini varsayarsak, o zaman aşağıdaki kodu kullanabiliriz.
Alt DIR_Intro()
Dim FN As String
FN = Dir(“C:\Users\jeevanay\Downloads\New folder\data.xlsx”)
MsgBox FN
End Sub
Bu VBA kodunu çalıştırdığımızda bir mesaj kutusunda aşağıdaki değeri alırız.

“data.xlsx” adlı dosya adını alıyoruz.
ÖNEMLİ NOKTALAR
Önemli Noktalar
- VBA DIR fonksiyonu bize verilen klasörden dosya adını almamızı sağlar. VBA DIR fonksiyonunun tüm argümanları isteğe bağlıdır.
- Bir klasördeki tüm dosyalar arasında dolaşıp anında tüm dosyaları açabiliriz.
- Do While Loop, bir klasördeki tüm dosyalar arasında döngü yapmamızı ve dosya adlarını almamızı sağlar.
- DIR fonksiyonunun ikinci argümanına vbDirectory değerini verdiğimizde dosya adlarını ve klasör adlarını alacaktır.
VBA DIR Fonksiyonunun Sözdizimi
Aşağıda VBA DIR fonksiyonunun sözdizimi yer almaktadır.
DIR([PathName], [Attributes as VbFileAttribute = vbNormal]) As String
İlginçtir ki VBA DIR fonksiyonunun tüm argümanları isteğe bağlıdır; bunu örnekler bölümünde tartışacağız.
[PathName]: Bu isteğe bağlı bir argümandır. Burada, dosyaya erişmek için ihtiyaç duyduğumuz yol adını sağlamamız gerekir. Burada tam klasör adresini sağlamalıyız. Verilen yolda hiçbir şey bulunmazsa, boş bir dize (“”) döndürecektir.
[Öznitelikler]: Burada, bazı öznitelikler sağlamamız gerekir ve buna dayanarak, VBA DITR İşlevi verilen özniteliklere göre dosya adını alacaktır. Örneğin, salt okunur veya gizli dosyaları ve özniteliksiz dosyaları almak istiyorsak, bu argümanda bu özniteliği belirtmemiz gerekir.
Aşağıda mevcut niteliklerin listesi bulunmaktadır.
| Devamlı | Değer | Tanım |
|---|---|---|
| vbNormal | 0 | Bunlar Varsayılan özniteliklerdir, yani öznitelik yoktur. |
| vbReadOnly | 1 | Hiçbir özniteliği olmayan dosyalarla birlikte salt okunur dosyaları belirtir. |
| vbHidden | 2 | Gizli dosyaları ve özniteliği olmayan dosyaları belirtir. |
| VbSystem | 4 | Sistem dosyalarını, öznitelikleri olmayan dosyalarla birlikte belirtir. Macintosh'ta kullanılamaz. |
| vbVolume | 8 | Birim etiketini belirtir; başka bir atıf belirtilirse vbVolume yoksayılır. Macintosh'ta kullanılamaz. |
| vbDirectory | 16 | Özniteliği olmayan dosyalara ek olarak dizinleri veya klasörleri belirtir. |
| vbAlias | 64 | Belirtilen dosya adı bir takma addır. Yalnızca Macintosh'ta kullanılabilir. |
Bu VBA DIR fonksiyonunun çıktısı bir dizedir.
VBA'da DIR Fonksiyonu Nasıl Kullanılır?
VBA DIR işlevini uygulamak ve dosya adını verilen klasör yolu adından almak için adım adım bir yaklaşım gösterelim. Örneğin, bir klasördeki bir dosyanın aşağıdaki görüntüsüne bakın.

Bir klasörde bazı dosyalarımız var. Bu dosyalardan birini almak için biraz kod yazalım.
Adım 1: VBA makrosuna isim vererek alt prosedürü başlatın .

Adım 2: VBA DIR fonksiyonu tarafından döndürülen dosya adını saklayacak bir değişken tanımlayın.

VBA DIR fonksiyonunun çıktısı bir dize değeri olduğundan, değişkene bir Dize veri türü atadık.
Adım 3: Şimdi VBA DIR fonksiyonunu değişkene atıyoruz.

Adım 4: Yol adı argümanı için dosya adını nereden almamız gerektiğini gösteren yol adresini vermeliyiz. Yol adresini almak için dosya klasörüne gidin ve üst taraftaki konum yoluna tıklayın.

Yolu kopyalayıp çift tırnak işaretiyle VBA DIR fonksiyonunun içine yapıştırın.

Adım 5: Şimdi dosyanın konumunun klasör yoluna sahibiz. Ancak dosya adını almak için dosya uzantısıyla birlikte dosya adını girmeliyiz.
Kopyalanan klasör yolundan sonra ters eğik çizgi girin, ardından uzantıyla birlikte dosya adını girin. Şimdi VBA DIR işlevi dosya adını verilen yol adından çıkaracaktır.

Adım 6: Değişken sonucunu bir mesaj kutusunda göster.
Sub Dir_Basic()
Dim FileName As String
FileName = Dir(“C:\Kullanıcılar\Kullanıcı\OneDrive\Masaüstü\Satış Raporları\Satış Raporu Şub.xlsx”)
MsgBox FileName
End Sub
Kodu çalıştıralım ve bir mesaj kutusunda aşağıdaki sonucu alacağız.

VBA DIR İşlevi, belirtilen klasörden dosya adını döndürdü, yani Sales Report Feb.xlsx
VBA DIR Fonksiyonunun Kullanımına Örnekler
VBA DIR Fonksiyonunun gerçek zamanlı uygulama örneklerini sizlere gösterelim.
Örnek 1: DIR Fonksiyonunu Kullanarak Dosya Adına Erişim
VBA DIR Fonksiyonunun gerçek zamanlı uygulama örneklerini sizlere gösterelim.

Bu klasörden bir "Maliyet Raporu" dosyası almamız gerektiğini varsayalım. Belirli bir dosya adı almak için VBA DIR işlevini kullanan aşağıdaki VBA kodunu kullanabiliriz.

Kodu 4 farklı parçaya ayırdık. Daha iyi anlamak için kodu parça parça açıklayalım.
Bölüm 1: Bu bölümde, değişkene dosya adını atamak için bir değişken tanımladık. "Cost Name.xlsx" dosya adını zaten bildiğimizden, aynısını değişkene atadık. En önemli şey, dosya uzantısını sağlamamız gerektiğidir. Burada, dosya uzantısı "xlsx"tir ve dosya adının ardından bir nokta (.) ile ayrılmış olarak aynısını sağladık.
Bölüm 2: Sonra, bu dosyanın nerede bulunduğuna karar vermeliyiz. Bunun için bir değişken tanımladık ve o dosyanın bulunduğu klasör yolunu bilgisayarımızdan kopyaladık.

Dikkat çekici bir şey, klasör yolunu kopyaladığımızda, yukarıdaki kodda fazladan bir ters eğik çizgi (\) (sarı) girmemizdir. Son klasör adından sonra, bu ters eğik çizginin ayıracağı dosya adını girmeliyiz.
Bölüm 3: Bu bölümde, dosya adını almak için yeni tanımlanan değişkene VBA DIR işlevini uyguladık. VBA Dir göreli yolu, Bölüm #2'deki değişkene atanan değişken aracılığıyla sağlanır.
VBA DIR fonksiyonu için Part#2 ve Part#1 değişkenlerini birleştirdik.
Bölüm 4: Son olarak, VBA DIR fonksiyonunun sonucunu bir mesaj kutusunda gösteriyoruz.
Bu kodu çalıştıralım ve VBA'da bir mesaj kutusunda aşağıdaki sonucu elde edelim .

Mesaj kutusunda dosya adını görüyoruz.
Örnek 2: DIR Fonksiyonunu Kullanarak Dosyayı Açma
Önceki örnekte, verilen klasörden dosya adının nasıl alınacağını gördük. Ancak, asıl görev dosyayı açmak ve o dosyayla çalışmaya başlamak olacaktır.
VBA DIR fonksiyonundan dönen dosyayı açmak için önceki örnekten bir adım daha ileri gitmemiz gerekiyor.
Örneğin, “Workbooks.Open” metodunu kullanarak “Cost Report.xlsx.” adlı dosyayı açmamız gerektiğini varsayalım. Aşağıda Open metodunun sözdizimi verilmiştir.

Burada dosya adını, yani tam klasör yolunu ve bu yoldaki dosya adını belirtmemiz gerekiyor.
Önceki örnekte, klasör yolu ve dosya adı VBA DIR işlevi kullanılarak değişkenlere çıkarılmıştı. VBA DIR işlevi tarafından döndürülen dosyayı açmak için Workbooks.Open yönteminin eklenmesiyle aynı kodu kullanacağız. Aşağıdaki kod dosyayı açacaktır.
Sub Dir_Ex2()
'Dosya adını atamak için bir değişken tanımlayın
Dim MyFile_Name As String
'Dosya adını ayarlayın
MyFile_Name = “Maliyet Raporu.xlsx”
'Klasör yolunu atamak için bir değişken tanımlayın
Dim Folder_Path As String
'Klasör yolunu atayın
Folder_Path = “C:\Users\User\OneDrive\Desktop\Sales Reports\Costing\”
'VBA DIR işlevini uygulamak için bir değişken tanımlayın
Dim File_Name As String
'Dosya adını almak için DIR işlevini atayın
File_Name = Dir(Folder_Path & MyFile_Name)
'Workbook.Open metodunu kullanarak dosyayı açın
Workbooks.Open Folder_Path & File_Name
End Sub
Kodun son satırı hariç tüm kod aynı kalır. Workbooks.Open metodunu ekledik. Bu metot için, “Folder_Path” değişkeni aracılığıyla klasör yolunu sağladık ve ardından “File_Name” değişkeni aracılığıyla dosya adını birleştirdik.
Bu kodu çalıştırdığımızda “Maliyet Raporu.xlsx” çalışma kitabı açılacaktır.

Örnek 3: DIR Fonksiyonunu Kullanarak Birden Fazla Açık Çalışma Kitabı
Bir klasörde birden fazla çalışma kitabımız olduğunda, VBA DIR Fonksiyonu aracılığıyla birden fazla çalışma kitabı açmak mümkündür. Her bir dosyayı incelemek ve açmak için VBA'da DO WHILE döngüsünü kullanmamız gerekir.
Örneğin, bir klasördeki dosyaların aşağıdaki görüntüsüne bakın.

Bu klasörde veya konumda dört dosyamız var. DO WHILE döngüsünü kullanalım ve her çalışma kitabını açalım.

Bölüm 1: Bir değişken tanımladık ve bu değişkene tüm dosyalar arasında döngü yapmamız gereken klasör yolunu atadık.
Bölüm 2: Burada, başka bir değişken tanımladık ve bu değişken için VBA DIR fonksiyonunu kullandık ve klasör yolu değişkenini VBA DIR fonksiyonu joker karakterleriyle takip ettik.
Excel joker karakterini (*) "xlsx" dosya uzantısıyla birleştirdik . Burada, joker karakteri (*) tüm dosya adlarıyla ve "xlsx" uzantısıyla eşleşecektir.
Bölüm 3: Daha sonra, DO WHILE döngüsünü kullanarak her çalışma kitabını birbiri ardına açtık, ta ki MyFile_Name değişkeni boşalana kadar, yani bu değişkenin değeri üzerinden döngüye alınan tüm dosyalar boşalıncaya kadar.
Burada dikkat etmemiz gereken bir diğer şey, parametresiz DIR kullandığımızdır, yani,
MyFile_Name = Dir()
Dosya açıldığında değişken değerini kaldırmak için kullanılır. Bunun nedeni, mevcut dosya açıldığında klasördeki aynı dosya yerine bir sonrakine gidecek olmasıdır.
Bu kodu çalıştırdığınızda sisteminizde açık olan tüm dosyaları görebilirsiniz.
Not: Bu kod “W Allowance Calculation.xlsm” adlı dosyayı açmayacaktır çünkü bu dosyanın uzantısı “xlsx” değil, “xlsm”dir. VBA DIR fonksiyonu joker karakterlerinde, dosya uzantısını “xlsx” olarak verdik; dolayısıyla diğer tüm dosya uzantılarını yok sayacaktır.
Örnek 4: Klasördeki Dosya Adını Alın
Verilen klasörden tüm dosya adlarını dinamik olarak alabiliriz. Örneğin, aşağıdaki klasör görüntüsüne bakın.

Aşağıdaki kodu kullanarak hücrelerde saklanan dosya adlarını alalım.
Sub Dir_Ex4()
‘Define a variable to assign the folder path
Dim FileName As String
‘Assign the folder path to the DIR function
FileName = Dir(“C:\Users\v-jeevanay\Desktop\Sales Reports\”)
‘Define a variable to increment row numbers to store file names in cell
Dim k As Long
k = 1
‘Apply a loop to go through all the files
Do While FileName <> “”
‘Store the file name a cell
Cells(k, 1).Value = FileName
‘Set the file name to nil before move to the next file
FileName = Dir()
‘Once the first file name fetched and stored, ….
‘we need to store the next file name in next cell hence increment the k value by 1
k = k + 1
Loop
End Sub
Bu kodu çalıştırdığımızda, tüm dosya adlarını aşağıdaki gibi bir çalışma sayfasında saklayacağız.

Verilen klasörde üç dosya ve bir klasör vardı ve VBA DIR fonksiyonu dosyalar arasında dolaşıp isimlerini hücrelere kaydediyordu.
Ancak klasör adını almak için VBA DIR fonksiyonunda “vbDirectory”yi de sağlamamız gerekir. VBA DIR fonksiyonunun ikinci argümanında vbDirectory'yi belirttiğimizde, hem dosya hem de klasör adlarını alacaktır.
Dikkat Edilmesi Gereken Önemli Noktalar
- Klasör yolunu belirttiğimizde, dosya adını vermeden önce ters eğik çizgiyi (\) birleştirmeliyiz.
- Dosya adını verdiğimizde dosya uzantısını da vermemiz gerekiyor.
- Joker karakter (*), dosya uzantısını takip eden dosya adlarıyla eşleşecektir.
VBA DIR işlevi için çeşitli alternatifler mevcuttur ve bunlardan bazıları şunlardır:
• FileSystemObject
• FileAttr
DIR ve DIR$ arasındaki fark açıktır.
• DIR – Bu çıktıyı Variant veri türü olarak döndürür.
• DIR$ – Bu çıktıyı String veri türü olarak döndürür.
DIR fonksiyonu, verilen klasör bilgisayardaki gerçek klasörle tam olarak aynı değilse boş bir dize döndürecektir. Tüm karakterler aynı olmalıdır.
