Excel VBA'da FileDialog, Windows dosyalarında gösterildiği gibi Dosya Gezgini'ne erişim sağlayan bir dosya iletişim kutusunun farklı örneklerini gösterebilir.


Application.FileDialog özelliği , dosya iletişim kutusunun bir örneğini temsil eden bir FileDialog nesnesi döndürür. FileDialog özelliği, özelliğin döndürdüğü FileDialog nesnesinin türünü belirleyen tek bir argüman olan MsoFileDialogType alır. MsoFileDialogType, çeşitli nedenlerle kullanabileceğiniz birden fazla farklı türe sahiptir.
Dört tür FileDialog nesnesi vardır:
- msoFileDialogFilePicker: Kullanıcının bir dosya seçmesine izin verir.
- msoFileDialogFolderPicker: Kullanıcının bir klasör seçmesine olanak tanır.
- msoFileDialogOpen: Kullanıcının bir dosyayı açmasına izin verir.
- msoFileDialogSaveAs: Kullanıcının bir dosyayı kaydetmesine izin verir.
FileDialog nesnesini kullanarak bir dosya iletişim kutusu görüntülemek için VBA FileDialog Show yöntemini kullanmalısınız. Bir iletişim kutusu görüntülendikten sonra, kullanıcı iletişim kutusunu kapatana kadar hiçbir kod yürütülmez. Seçili dosya veya klasöre VBA FileDialog SelectedItem kullanılarak erişilebilir.

Bu alt rutin sisteminizde herhangi bir dosyayı seçebileceğiniz bir dosya iletişim kutusu açar.

Tercih ettiğiniz dosyayı seçtikten sonra bir Mesaj kutusu görünür.

- VBA FileDialog, VBA'da dosya ve klasörleri açmanıza, seçmenize ve kaydetmenize olanak tanıyan bir özelliktir.
- VBA'da dört tür FileDialog bulunur: msoFileDialogFilePicker, msoFileDialogFolderPicker, msoFileDialogOpen ve msoFileDialogSaveAs.
- Başlık, ilk dosya adı ve filtreler gibi özellikleri ayarlayarak FileDialog'u özelleştirebilirsiniz.
- VBA'da bir FileDialog'dan seçili dosyayı/dosyaları almak için FileDialog nesnesinin SelectedItems özelliğini kullanabilirsiniz.
- Ayrıca, FileDialog nesnesinin AllowMultiSelect özelliğini True olarak ayarlayarak VBA FileDialogs'u kullanarak birden fazla dosya seçebilirsiniz.
VBA FileDialog Seçeneği Nasıl Kullanılır?
Aşağıdaki adımları izleyerek VBA FileDialog'un nasıl kullanılacağını öğrenin:
- Çalışma kitabında “Geliştirici”ye tıklayın ve ardından “Visual Basic”e gidin.


VBA Editörü açılır, “Ekle” butonuna tıklanır ve “Modül” seçeneği seçilir.
FileDialog'da birden fazla dosya seçmenize izin veren basit bir alt rutin oluşturarak başlayın. - Alt programın adını yazın.

- Bir VBA FileDialog veri türü ve bir Variant veri türü tanımlayın.

Not: VBA FileDialog SelectedItem'ı Variant veri türü olarak bildirin. Başka herhangi bir veri türü hata verecektir. - VBA FileDialog fonksiyonunu çağırın ve VBA FileDialog filtre nesnesi 'msoFileDialogFilePicker'ı seçin.

Dosya iletişim kutusunda istediğiniz dosyaları seçmenize olanak tanır. - FileDialog'da birden fazla dosya seçmek için AllowMultiSelect işlevini “True” olarak ayarlayın.

Artık FileDialog'da birden fazla dosya seçebilirsiniz. - VBA FileDialog Show seçeneğinin “-1”e eşit olup olmadığını kontrol etmek için bir If-Else ifadesi başlatın.

Burada, Excel VBA FileDialog seçeneğindeki “Aç” butonunu tasvir ettiği için Show fonksiyonunun '-1' döndürüp döndürmediğini kontrol ediyoruz. - '-1' döndürülürse Variant değişkeninde saklanan dizinlerini bir mesaj kutusuna yazdır.

For döngüsü birden fazla dosya seçmek için başlatılır.
Kod:
Sub SelectMultipleFiles()
Dim fDialog As FileDialog
Dim vrtSelectedItem As Variant
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
fDialog.AllowMultiSelect = True
If fDialog.Show = -1 Then
For Each vrtSelectedItem In fDialog.SelectedItems
MsgBox vrtSelectedItem
Next vrtSelectedItem
End If
End Sub - VBA Araç Çubuğu'ndaki yeşil ok düğmesine tıklayarak VBA FileDialog kodunu çalıştırın.



VBA FileDialog Filtresini doğru bir şekilde nasıl kullanacağınızı öğrenmek için aşağıdaki ilginç örneklere bakalım.
Örnekler
Aşağıdaki örneklerle VBA FileDialog referansının nasıl kullanılacağını öğrenin.
Örnek 1
Örneğin, bir dosyayı seçtiğinizde, her zamanki gibi yalnızca dosya adını döndürecek ve dizin adını döndürmeyecek bir programa ihtiyacınız var. Bu, VBA FileDialog Filter seçeneğiyle yapılabilir.
- Adım 1: Dosya adını bir String değeri olarak çıkarmak için bir fonksiyon oluşturarak başlayın.

Bir dizge değeri döndürür.
- Adım 2: Dizin içindeki son ters eğik çizgiyi bulmak için bir tamsayı değişkeni alın.

- Adım 3: Son ters eğik çizginin sağındaki dizeyi seçerek dosya adını alın ve ardından son ters eğik çizginin konumunu dizenin boyutundan çıkararak diğer değerleri yok sayın.

Daha sonra fonksiyonu sonlandırıp alt programa devam edin.
- Adım 4: Yalnızca adı görüntülemek için kullanılan alt rutine bir ad verin.

- Adım 5: FileDialog için VBA değişkenlerini , VBA FileDialog SelectedItems'ı, dosya dizinleri için Variant'ı ve dosyanın adını depolamak için bir String'i bildirin .

- Adım 6: FileDialog görünümünü açın. Birden fazla dosyayı görüntülemeyi etkinleştirin.

- Adım 7: Dosya İletişim Kutusunun açık olup olmadığını kontrol etmek için bir If ifadesi başlatın.

Açık ise kullanıcı tarafından seçilen öğeleri VBA FileDialog SelectedItems değişkenine atayın.
- Adım 8: Dosya dizinlerini kontrol eden bir FOR döngüsü başlatın. Dosya adını çıkarmak ve dize değişkeninde saklamak için daha önce tanımlanan işlevi çağırın.

Dosya adını bir mesaj kutusuna yazdır.
- Adım 9: Kullanıcı herhangi bir dosya seçmeden FileDialog'u kapatırsa bir Else koşulu ayarlayın. Ardından kaynakları korumak için FileDialog değişkenini boşaltın.

Kod:
Sub ProcessSelectedFiles()
Dim FileDialog As FileDialog
Dim SelectedFiles As FileDialogSelectedItems
Dim FilePath As Variant
Dim FileName As String
Set FileDialog = Application.FileDialog(msoFileDialogOpen)
FileDialog.AllowMultiSelect = True
If FileDialog.Show = -1 Then
Set SelectedFiles = FileDialog.SelectedItems
For Each FilePath in SelectedFiles
FileName = GetFileNameFromPath(FilePath)
MsgBox “Seçili Dosya: ” & FileName
Next FilePath
Else
MsgBox “Hiçbir dosya seçilmedi.”
End If
Set FileDialog = Nothing
End Sub
GetFileNameFromPath(ByVal FilePath As String) As String
Dim LastBackslash As Integer
LastBackslash = InStrRev(FilePath, “\”)
GetFileNameFromPath = Right(FilePath, Len(FilePath) – LastBackslash)
End Function
- Adım 10: Dosyaları görüntülemek için kodu çalıştırın.


Örnek 2
Excel değerlerine karşılık gelen değerlere atıfta bulunurken, yeni bir Pencere açıp verileri kendiniz görmeniz gerektiğinde hiç canınız sıkıldı mı? Bunun yerine, bir dosyayı açmak ve içeriğini görüntülemek için bir alt prosedür yazabilirsiniz.
Söz konusu dosya şudur:

- Adım 1: Bir alt rutini açıp dosyayı görüntüleyecek şekilde adlandırın.

- Adım 2: İki değişken tanımlayın. Biri FileDialog'u açmak, diğeri ise Seçili Dosyanın dizinini saklamak içindir.

- Adım 3: Bu komutla sisteminizdeki FileDialog'u açın.

- Adım 4: FileDialog'un açık olup olmadığını "-1" olup olmadığını kontrol ederek kontrol edin ve ardından seçtiğiniz öğeyi atayın. VBA FileDialog SelectedItem, tekil bir öğeye sahip bir dizi olarak tasvir edilmiştir.

- Adım 5: Hata işlemeyi gerçekleştirin.

- Adım 6: Seçili dosyayı açın ve ona “#1” yani dosya numarası 1 olarak atayın.

- Adım 7: Dosyaları açarken herhangi bir hata olup olmadığını kontrol edin. Değilse, açın ve dosya içeriklerini bir VBA değişkeni olan FileContent'e kopyalayın.

Girişi kaydettikten sonra, kaynakların arka planda tükenmesini önlemek için dosyayı kapatın.
- Adım 8: Önceki adımın “Else” kısmını tanımlayın.

- Adım 9: Hata parametrelerini sıfırlayın.

- Adım 10: Mesaj kutusu VBA fonksiyonunu kullanarak dosyanın içeriğini yazdırın .

- Adım 11: Herhangi bir dosya seçilmeden FileDialog kapatılırsa, herhangi bir hatayı önlemek için yanıtı bir Mesaj Kutusu'nda yazdırın.

- Adım 12: Kaynakları korumak için FileDialog değişkenini boşaltın.

Kod:
Sub OpenAndDisplayFile()
Dim FileDialog As FileDialog
Dim SelectedFile As Variant
Set FileDialog = Application.FileDialog(msoFileDialogOpen)
If FileDialog.Show = -1 Then
SelectedFile = FileDialog.SelectedItems(1)
On Error Resume Next
Open SelectedFile For Input As #1
If Err.Number = 0 Then
FileContent = Input$(LOF(1), #1)
Close #1
Else
FileContent = “Dosya açılırken hata oluştu.”
End If
On Error GoTo 0
MsgBox “Dosya İçeriği:” & vbNewLine & FileContent
Else
MsgBox “Dosya seçilmedi.”
End If
Set FileDialog = Nothing
End Sub
- Adım 13: Kodu çalıştırmak istediğinizde yeşil ok düğmesine tıklayın. Çalıştırıldığında bir Mesaj Kutusu açılacaktır.

Bir dosya seçin ve üzerine çift tıklayın. Aşağıda gösterildiği gibi bir mesaj kutusu yazdırır.

Dikkat Edilmesi Gereken Önemli Noktalar
- Kullanıcının iletişim kutusunu iptal ettiği veya hatalarla karşılaştığı durumları ele almak için VBA kodunuza her zaman hata işleme özelliğini ekleyin .
- Seçilen dosya veya klasörleri işlemeden önce, kullanıcının seçmeden iletişim kutusunu iptal ettiği durumları ele almak için sonuçların boş veya null olup olmadığını kontrol edin.
- Belirli göreviniz için uygun FileDialog türünü (örneğin, Dosya Aç, Dosyayı Kaydet, Klasör Seçici) seçin.
- Kodunuz birden fazla dosya seçimine izin veriyorsa, SelectedItems koleksiyonunda birden fazla öğeyi işlemeye hazır olun.
- Seçili dosya ve klasör yollarıyla çalışmak için uygun yol işleme işlevlerini kullanın. FileSystemObject bu amaç için yararlı olabilir.
- Sistem kaynaklarını serbest bırakmak için, kullanmayı bitirdiğinizde tüm kaynakları (örneğin, FileDialog nesnelerini) açıkça serbest bırakın.
1. VBA'da hangi tür FileDialog'lar mevcuttur?
Dört tür VBA FileDialog Başvurusu vardır:
• msoFileDialogFilePicker: Kullanıcının bir veya daha fazla dosya seçmesine izin verir.
• msoFileDialogFolderPicker: Kullanıcının bir klasör seçmesine izin verir.
• msoFileDialogOpen: Kullanıcının ana uygulamada açılabilen bir veya daha fazla dosya seçmesine izin verir.
• msoFileDialogSaveAs: Kullanıcının geçerli dosya olarak kaydedilebilecek tek bir dosya seçmesine izin verir.
VBA'da FileDialog'u özelleştirmek için başlık, ilk dosya adı ve filtreler gibi çeşitli özellikler ayarlayabilirsiniz. Ayarlanacak özelliklerden bazıları şunlardır:
• AllowMultiSelect: Kullanıcının birden fazla dosya seçmesine izin verir.
• ButtonName: Bir dosya iletişim kutusunun eylem düğmesinde görüntülenen metin.
• DialogType: MsoFileDialogType'ı değiştirin.
• Filter: Kullanıcının seçebileceği dosya türlerini filtrelemek için bir dosya filtresi ayarlayın.
• InitialFileName: Açılacak ilk yol.
• InitialView: İlk dosya görünümü.
• Title: Dosya aç iletişim penceresinin başlığı.
• VBA'da bir FileDialog'dan seçili dosyayı/dosyaları almak için FileDialog nesnesinin SelectedItems özelliğini kullanabilirsiniz.
• Bu özellik, kullanıcının dosya iletişim kutusundan seçtiği dosyaların yollarının bir listesini içeren bir FileDialogSelectedItems koleksiyonu döndürür.
• Her seçili dosyayı işlemek için SelectedItems koleksiyonunda döngü oluşturabilirsiniz.
• Seçili dosyanın/dosyaların yolunu bulduğunuzda, dosya/dosyalar üzerinde herhangi bir eylem gerçekleştirmek için bunu VBA kodunuzda kullanabilirsiniz.
Evet, VBA FileDialogs kullanarak birden fazla dosya seçmek mümkündür. FileDialog nesnesinin AllowMultiSelect özelliğini True olarak ayarlayın.
