Excel VBA'da ChDir, VBA kodunun yürütüldüğü geçerli dizini (klasörü) değiştirmek için kullanılan bir ifadedir.
ChDir ifadesi yürütüldüğünde, geçerli dizin belirtilen yola güncellenir. VBA kodu tarafından gerçekleştirilen herhangi bir sonraki dosya veya klasör işlemi, örneğin dosyaları açma, kaydetme veya silme, yeni geçerli dizine göreli olacaktır.
ChDir ifadesinin geçerli dizini yalnızca VBA kod yürütme süresi boyunca etkilediğini belirtmek önemlidir. Kod çalışmayı bitirdiğinde, geçerli dizin daha önce olduğu duruma geri döner.
Örneği ele alalım:


- ChDir, kodun geçerli dizinini (klasörünü) değiştirmek için kullanılan bir VBA ifadesidir.
- Yeni geçerli dizine göre dosya ve klasör işlemleri için konumu belirtmenize olanak tanır.
- ChDir, belirli bir dizindeki dosya ve klasörlere erişimi kolaylaştırır ve kod okunabilirliğini artırır.
- Dosya işlemlerinin bağlamını geçici olarak değiştirmek, dosya işleme konusunda esneklik ve kontrol sağlar.
- ChDir ile istediğiniz dizini belirtmek için mutlak veya bağıl yollar kullanabilirsiniz. Ancak, ChDir için argüman olarak geçerli ve mevcut bir dizin yolu sağlayın. Yolun doğru biçimlendirildiğinden ve erişilebilir bir dizine işaret ettiğinden emin olun.
ChDir ifadesinin sözdizimi aşağıdaki gibidir:
ChDir yolu
Burada, yol geçerli dizin olarak ayarlamak istediğiniz yeni dizini veya klasörü temsil eder. VBA ByVal argümanı ile mutlak bir yol (örneğin, “C:\Folder\Subfolder”) veya göreli bir yol (örneğin, “..\NewFolder”) olarak belirtilebilir.
Excel VBA ChDir nasıl kullanılır?
VBA ChDir'i VBA ByVal varsayılanıyla uygulamak için aşağıda gösterildiği gibi şu adımları gerçekleştiriyoruz:
Adım 1: Araç çubuğundaki “ Geliştirici sekmesi ” bölümüne gidin ve “Visual Basic” seçeneğine tıklayın. Şimdi, işlevler ve Alt prosedürler eklemek için VBA Editörü açılır. Ardından, yeni bir modül veya boş sayfa oluşturmak için “Ekle” ve “Modül” düğmelerine tıklayın.


Adım 2: “example.txt” metin dosyasındaki metni yazdırmak için bir alt prosedür başlatın. Dosyanın bir kesiti aşağıda gösterilmiştir:


Adım 3: Mevcut çalışma dizinini metin dosyanızın bulunduğu dizine değiştirin.

Not: Verileri yazmak istediğiniz gerçek yol ve dosya adını filePath değişkenine ayarladığınızdan emin olun.
Adım 4: Bir Dize değişkeni tanımlayın ve ona dosya adını atayın.

Adım 5: Bir tamsayı değişkeni tanımlayın ve bunları FreeFile olarak atayın.

VBA'daki FreeFile fonksiyonu, açık bir dosyayı benzersiz bir şekilde tanımlamak için kullanılabilecek bir dosya numarası elde etmek için kullanılır.
- Open ifadesini kullanarak bir dosya açtığınızda, dosyayı tanımlamak için bir dosya numarası sağlamalısınız. Dosya numarası bir tamsayı değeridir.
- FreeFile, şu anda kullanılmayan bir sonraki kullanılabilir dosya numarasını döndürür. Sizin için bir sonraki kullanılabilir dosya numarasını otomatik olarak takip eder.
- FreeFile'ı çağırarak, VBA kodunuzda açık olan başka hiçbir dosya tarafından kullanılmayan bir dosya numarası alabilirsiniz.
- FreeFile'ı kullanarak bir dosya numarası elde ettiğinizde, bunu Open ifadesinde kullanarak dosyayı okuma, yazma veya diğer dosya işlemleri için açabilirsiniz.
Adım 6: Dosyayı okumak ve dosyanın içeriğini görüntülemek için fileName'de tanımlanan dosyayı dosya modunda açın.

Input$(LOF(fileNumber), fileNumber) metin dosyasının tüm içeriğini okur ve bunu String değişkeni fileContent'e atar.
Adım 7: Hemen sekmesinde dosya içeriğini yazdırın.

Kod:
Sub ReadTextFileWithChDir()
ChDir “D:\datasets”
Dim fileName As String
fileName = “example.txt”
Dim fileNumber As Integer
fileNumber = FreeFile
Open fileName For Input As fileNumber
Dim fileContent As String
fileContent = Input$(LOF(fileNumber), fileNumber)
Close fileNumber
Debug.Print fileContent
End Sub
Adım 8 : F5 tuşuna basarak veya VBA araç çubuğundaki çalıştır düğmelerini kullanarak metni yazdırın.

Örnekler
VBA ChDir fonksiyonunu kullanarak bazı örneklere bakalım.
Örnek 1
VBA ByVal isteğe bağlı Write fonksiyonunu kullanarak dizine erişerek bir dizinde bulunan bir dosyanın değerlerini düzenlememiz gereken bir örneği ele alalım.
Adım 1: Bir metin dosyasındaki değerleri düzenleyen bir alt prosedür tanımlayın.

Adım 2: Dizini, metin dosyasının bulunduğu dizine değiştirin.

Not: Verileri yazmak istediğiniz gerçek yol ve dosya adı ile filePath değişkenini ayarladığınızdan emin olun.
Adım 3: Bir Dize değişkeni tanımlayın ve ona dosya adını atayın.

Adım 4: Bir tamsayı değişkeni tanımlayın ve bunları FreeFile olarak atayın.

Adım 5: Düzenlemek için dosyayı Çıktı modunda açın ve Excel VBA'da dosya işleme bölümündeki Yazdır işlevini kullanarak "example.txt" dosyasındaki değerleri düzenleyin.

Print ifadesi dosyaya veri yazmak için kullanılır. Birden fazla satır veya değer yazmak için Print'e birden fazla argüman geçirebilirsiniz.
Her Print ifadesi dosyaya yeni bir satır yazar.
Veriler yazıldıktan sonra Close ifadesi kullanılarak dosya kapatılır.
Kod:
Sub FileOperationsExample()
ChDir “D:\datasets”
Dim fileName As String
fileName = “example.txt”
Dim fileNumber As Integer
fileNumber = FreeFile
Open fileName For Output As #fileNumber
Print #fileNumber, “Hello, world!”
Print #fileNumber, “This is a line of text.”
Print #fileNumber, “123”
Close #fileNumber
ChDir “C:\”
Debug.Print “Current Directory: ” & CurDir
End Sub
Adım 6: Yukarıdaki kodu yazdırın. Çıktı anında sekmede yazdırılır.

Ve eğer “example.txt” dosyasını açarsanız:

Örnek #2
Verilen bir CSV dosyasının değerlerini yazdırmamız gereken bir örneği ele alalım .

Adım 1: CSV dosyasının değerlerini okumak ve yazdırmak için bir alt prosedür başlatın.

Adım 2: ChDrive'ı kullanarak sürücü adını tanımlayın ve ChDir'i kullanarak dizin yolunu değiştirin.

Not: Verileri yazmak istediğiniz gerçek yol ve dosya adı ile filePath değişkenini ayarladığınızdan emin olun.
Adım 3: Excel VBA'nın okumasını istediğiniz dosya adını bir Dize değişkeninde tanımlayın.

Adım 4: Excel VBA'da FreeFile değerini bir Integer değişkenine atayın.

Adım 5: Dosyayı Giriş modunda açın ve $Input() fonksiyonunu kullanarak tüm dosyayı okuyun. Bu değerleri bir Dize değişkenine atayın.

Input$(LOF(fileNumber), fileNumber) ifadesi VBA'da bir dosyanın tüm içeriğini bir dize değişkenine okumak için kullanılır.
- LOF(dosyaNumarası), verilen dosya numarasıyla ilişkili dosya boyutunu alır. LOF, “Dosya Uzunluğu” anlamına gelir.
- Input$(LOF(dosyaNumarası), dosyaNumarası) dosyanın tüm içeriğini geçerli konumdan başlayarak okur ve bunu bir dize olarak döndürür.
- Input$'un ilk parametresi, dosyanın uzunluğunu temsil eden LOF(fileNumber) olarak belirtilen okunacak karakter sayısıdır.
- Input$'un ikinci parametresi, VBA ByVal dizisinden içeriklerin okunacağı dosyayı tanımlayan dosya numarasıdır.
Bundan sonra değerler Debug.Print kullanılarak Immediate sekmesinde yazdırılır.
Kod:
Sub Print_directory()
ChDrive “D”
ChDir “D:\datasets”
Dim fileName As String
fileName = “autogen_data.csv”
Dim fileNumber As Integer
fileNumber = FreeFile
Open fileName For Input As fileNumber
Dim fileContent As String
fileContent = Input$(LOF(fileNumber), fileNumber)
Debug.Print fileContent
Close fileNumber
End Sub
Adım 6: Yukarıdaki kodu yazdırın. Çıktı anında sekmede yazdırılır.

Dikkat Edilmesi Gereken Önemli Noktalar
- Belirli bir konuma göre dosya veya klasör işlemleri yaparken geçerli dizini değiştirmek için ChDir'i kullanın.
- ChDir kullanırken olası hataları ele almak için On Error Resume Next veya On Error GoTo gibi hata işleme tekniklerini kullanın. Belirtilen dizinin var olamayacağı veya erişilemeyeceği durumları ele almanıza yardımcı olacaktır.
- Dosya işlemlerini gerçekleştirmek için yalnızca ChDir'e güvenmeyin. ChDir geçerli dizini değiştirirken dosya işlemlerini doğrudan gerçekleştirmez. Değiştirilen dizindeki dosyalarla çalışmak için Open, Close veya harici kütüphaneler tarafından sağlanan yöntemler gibi diğer uygun dosya işleme ifadelerini kullanın.
- VBA kodu çalışmayı bitirdikten sonra geçerli dizinin değişmiş olarak kalacağını varsaymayın . Geçerli dizin, VBA kodunun çalışan örneğine özgüdür ve kod yürütme işlemi tamamlandıktan sonra eski haline döner.
