VBA kodunuzdaki dosyalarla çalışmak için, benzersiz bir dosya numarası almak üzere Excel'in yerleşik VBA FreeFile işlevini kullanabilirsiniz. Freefile işlevi, Open ifadesinin kullanabileceği bir dosya numarası döndürür. VBA makrolarınızı yanlışlıkla diğer açık dosyaların üzerine yazmaktan veya bunlarla oynamaktan korur. VBA Open Workbook
Benzersiz dosya numarasını depolamak için önce MyFileNum adlı bir tamsayı değişkeni bildiririz. Sonra, Open ifadesini kullanarak “C:” konumunda bulunan “MyFile.txt” adlı mevcut bir metin dosyasını ekleriz ve bunu MyFileNum dosya numarasıyla ilişkilendiririz.

Değişikliklerin korunduğundan ve kaynakların serbest bırakıldığından emin olmak için dosyayı sonundaki Close ifadesini kullanarak kapatıyoruz.

Yukarıdaki kodu çalıştırdığımızda, yukarıda bahsedilen kodun bir sonucu olarak “C:” konumundaki mevcut “MyFile.txt” metin dosyasının sonuna “Bu ek veridir.” metni eklenecektir.

- VBA FreeFile, Aç, Kapat ve diğer dosyayla ilgili işlemlerle birlikte dosya işlemlerini otomatikleştirmek için kullanılır.
- Kaynakları serbest bırakmak için, işiniz bittikten sonra dosyaları kapatmak amacıyla her zaman Close ifadesini kullanın.
- VBA FreeFile çeşitli dosya türleriyle kullanılabilir ve sadece metin dosyaları için değildir.
- VBA FreeFile UTF-8, çok dilli metinlerle iyi çalışan ve çok çeşitli karakterleri destekleyen popüler bir karakter kodlamasıdır.
Excel VBA'da FreeFile Fonksiyonu Nasıl Kullanılır?
Excel VBA'da FreeFile işlevini kullanmak basittir. Aşağıda gösterilen adımları izleyin:
- Excel çalışma kitabınızı açın ve Visual Basic for Applications (VBA) düzenleyicisine erişmek için ALT + F11 tuşlarına basın.

- Menüde “Ekle”ye tıklayıp “Modül”ü seçerek yeni bir modül ekleyin.

- Bir dosya numarası değişkenini bildirmek için Dim ifadesini kullanın.
Örnek:
Dim MyFileNum As Integer - Benzersiz bir dosya numarası almak için VBA FreeFile fonksiyonunu kullanın.
Sonucu dosya numaranız için değişkene koyun. Örneğin:
MyFileNum = FreeFile - MyFileNum artık VBA kodunuzda bulunan dosyaları açmak, yazmak ve okumak için kullanılabilir.
Excel Dosyasını Kapatırsak FreeFile Fonksiyonu Her Zaman 1 Döndürür
VBA FreeFile fonksiyonu tek bir VBA oturumu içerisinde her çağrıldığında, mevcut olan en düşük dosya numarasından başlanır ve bu numara artırılır.
Ancak bir dosyayı kapatmak için Close ifadesini kullandığınızda, ilişkili dosya numarası serbest bırakılır ve bu da VBA FreeFile'ın sonraki dosya işlemi için bir kez daha 1 döndürmesini sağlar.
Bu davranış kasıtlıdır ve VBA oturumu içinde her dosya işleminin ayrı bir dosya numarasına bağlanmasını sağlar. Bunu bir örnekle anlayalım.

FileNumber1 ve FileNumber2 dosya numaraları, VBA FreeFile işlevi kullanılarak kodda atanır. VBA FreeFile, aynı VBA oturumunda her çağrıldığında erişilebilir olan en düşük dosya numarası olan 1'den başlar. Sonuç olarak, FileNumber1 ve FileNumber2'ye 1 değeri atanır.
Sonuç olarak, MsgBox, aynı VBA oturumu içerisinde her iki dosya numarasının da 1 olarak ayarlandığını göstermek için “FileNumber1: 1” ve “FileNumber2: 1” değerlerini gösterir.

Örnekler
Örnek 1 – Bir Metin Dosyasını Açma ve Metin Yazma
Bu örnekte, VBA FreeFile'ı kullanarak benzersiz bir dosya numarası atamayı, çıktı için masaüstündeki 'Example1.txt' metin dosyasını açmayı, dosyaya 'Merhaba, Excel VBA!' yazmayı ve değişiklikleri kaydetmek için dosyayı kapatmayı göreceğiz.

- Adım 1: Yeni modülde yeni bir alt rutin oluşturuyoruz ve FreeFile fonksiyonu tarafından döndürülen dosya numarasını depolamak için “MyFileNum” adında bir tamsayı değişkeni bildiriyoruz. Açtığımız dosyayı benzersiz bir şekilde tanımlamak için.

- Adım 2: Burada, benzersiz bir dosya numarası elde ediyoruz ve bunu VBA FreeFile fonksiyonunu kullanarak MyFileNum değişkenimize atıyoruz. Erişilebilen en düşük dosya numarası otomatik olarak bu numara olarak seçilir.

- Adım 3: Yazma işlemi için “C:” dizininde bulunan “Example1.txt” adlı metin dosyasını açmak için Open ifadesini kullanın.
Bu satır “C:”deki “Example1.txt” metin dosyasını açar. Bu dosya işleminin daha önce edindiğimiz farklı dosya numarasına bağlı olduğundan emin olmak için dosya numarasını “MyFileNum” değişkeni olarak belirleriz.

- Adım 4: “MyFileNum” ile bağlantılı açılan metin dosyasına “Merhaba, Excel VBA!” metni Print ifadesi kullanılarak yazılır.

- Adım 5: Son olarak, MyFileNum dosya numarasına bağlı metin dosyasını Close ifadesini kullanarak kapatıyoruz. Dosyanın doğru şekilde kapatılıp kaydedildiğinden emin olmanın yanı sıra, bu adım sistem kaynaklarını serbest bırakmak için de önemlidir.

- Adım 6: Şimdi makroyu kaydedin ve Çalıştır'a tıklayın. Masaüstünde “Example1.txt” adlı bir metin dosyası yoksa, bu kodun çıktısı bir tane oluşturacak ve ona “Merhaba, Excel VBA!” metnini ekleyecektir.
Sağlanan kodu çalıştırdığınızda, “Example1.txt” dosyasındaki mevcut metin, masaüstünde dosya zaten mevcutsa “Merhaba, Excel VBA!” ifadesiyle değiştirilecektir.

İşte tam kod:
Sub WriteToFile()
Dim MyFileNum As Integer
MyFileNum = FreeFile
Open “C:\Users\Desktop\Example1.txt” For Output As MyFileNum
Print #MyFileNum, “Hello, Excel VBA!”
Close MyFileNum
End Sub
Örnek 2 – Bir Metin Dosyasından Okuma
Bu örnek, masaüstünde “Example2.txt” metin dosyasını giriş için açmak, bir döngü kullanarak satır satır okumak ve ardından her satırı Hemen penceresinde görüntülemek için Debug.Print'i kullanmak için VBA FreeFile'ı nasıl kullanacağınızı gösterecektir.
- Adım 1: Dosya numarasını saklamak için, önceki örnekte olduğu gibi MyFileNum adında bir tamsayı veri türü değişkeni bildiriyoruz .

- Adım 2: Benzersiz bir dosya numarası elde etmek ve bunu MyFileNum'a atamak için FreeFile fonksiyonunu kullanırız.

- Adım 3: Burada, Open ifadesini kullanarak aynı metin dosyasını okumak için açıyoruz. Bir kez daha, dosya numarasını MyFileNum olarak belirliyoruz.

- Adım 4: Bu bölümde, dosyanın sonuna ulaşana kadar (EOF) bir döngü kullanarak metin dosyasının içeriğini satır satır okuruz. Her bir metin satırını “TextLine” değişkenine okuruz ve VBA düzenleyicisinin Immediate penceresinde göstermek için “Debug.Print” kullanırız.

- Adım 5: MyFileNum dosya numarasına bağlı metin dosyası, önceki örnekte olduğu gibi Close ifadesi kullanılarak doğru bir şekilde kapatılır.

- Adım 6: Bu kodun çıktısı, masaüstü metin dosyası olan “Example2.txt”nin içeriğini okuyacak ve dosyanın her satırını VBA editörünün Anlık penceresine yazdırmak için “Debug.Print”i kullanacaktır.

İşte tam kod:
Sub ReadFromFile()
Dim MyFileNum As Integer
MyFileNum = FreeFile
Open “C:\Users\Desktop\Example2.txt” For Input As MyFileNum
Do Until EOF(MyFileNum)
Line Input #MyFileNum, TextLine
Debug.Print TextLine
Loop
Close MyFileNum
End Sub
Örnek 3 – Birden Fazla Dosya Numarası Kullanma
Bu örnekte, VBA FreeFile'ı kullanarak File1 ve File2'ye ayrı dosya numaraları atamanın nasıl yapılacağını göreceğiz. Daha sonra 'File1.txt' ve 'File2.txt' çıktı için açılır, her dosyaya veri yazılır ve değişiklikleri kaydetmek için dosyalar kapatılır.


- Adım 1: Bu örnekte, iki farklı dosyanın dosya numaralarını depolamak için File1 ve File2 adında iki tamsayı VBA değişkeni bildiriyoruz.

- Adım 2: FreeFile fonksiyonunu iki kez kullanarak iki ayrı dosya numarası elde ediyoruz ve bu numaraları File1 ve File2'ye tahsis ediyoruz.

- Adım 3: Bu adımda, Open ifadesini kullanarak masaüstünde “File1.txt” adlı bir dosyayı çıktı için açıyoruz. Bu dosyaya, onu bu belirli dosya işlemine bağlayan File1 dosya numarası verilmiştir.

- Adım 4: Burada, #File1 ile Print ifadesi kullanılarak açılan “File1.txt” dosyasına “Data for File 1” metni yazılır. Belirtilen veri bu kod satırı ile dosyaya eklenir.

- Adım 5: Bu adımda File1 dosya numarasına bağlı olan “File1.txt” dosyasını doğru bir şekilde kapatmak için Close ifadesini kullanıyoruz.
Bunu yaparak dosyada yaptığınız değişikliklerin kaydedileceğinden ve sistem kaynaklarının serbest bırakılacağından emin olabilirsiniz.

- Adım 6: Adım 3'te olduğu gibi, çıktı için masaüstünden “File2.txt” adlı ek bir dosya başlatıyoruz. Bu dosyaya “File2” dosya numarası atanmış, yani gelecekteki dosya işlemlerinin nesnesi olacak.

- Adım 7: Bu satırda, VBA'da #File2 ile Print ifadesini kullanarak açılan “File2.txt” dosyasına “Data for File 2” metnini yazıyoruz. Bu satır belirtilen veriyi dosyaya ekler.

- Adım 8: Son olarak, “File2” dosya numarasına bağlı “File2.txt” dosyasını doğru bir şekilde kapatmak için Close ifadesini kullanırız. Bu adım, dosyada yapılan tüm değişikliklerin kaydedilmesini ve sistem kaynaklarının tıpkı Adım 3'te olduğu gibi serbest bırakılmasını garanti eder.

- Adım 9: VBA makrosunu kaydedin ve kodu çalıştırın. Masaüstünde “File1.txt” ve “File2.txt” olmak üzere iki metin dosyası üretecektir, “Data for File 1” ve “Data for File 2” sırasıyla “File1.txt” ve “File2.txt” olarak yazılmıştır.


İşte tam kod:
Sub MultipleFiles()
Dim File1 As Integer, File2 As Integer
File1 = FreeFile
File2 = FreeFile
Open “C:\Users\Vikram\Desktop\File1.txt” For Output As File1
Print #File1, “Data for File 1”
Close File1
Open “C:\Users\Vikram\Desktop\File2.txt” For Output As File2
Print #File2, “Data for File 2”
Close File2
End Sub
Dikkat Edilmesi Gereken Önemli Noktalar
- VBA FreeFile fonksiyonunu, başka bir işlem tarafından veya VBA kodunuz içerisinde zaten açık olan bir dosyayı açmak için kullandığınızda , VBA FreeFile Dosya Zaten Açık sorunu ortaya çıkabilir.
- Karışıklığı ve olası hataları önlemek için, VBA FreeFile'ın döndürdüğü dosya numaraları sırayla kullanılmalıdır.
- Sistem kaynaklarını serbest bırakmak için, işiniz bittikten sonra dosyaları kapatmak üzere VBA FreeFile Close ifadesini kullanmak en iyi uygulamadır.
- VBA FreeFile Read genellikle verileri satır satır veya belirli veri türlerine göre çıkarmanızı sağlar. Satır Girişi veya Giriş gibi VBA giriş ifadeleri kullanılarak gerçekleştirilir.
