VBA (Visual Basic for Applications) FileCopy işlevi, bir dosyayı bir konumdan diğerine kopyalamak için kullanılan yerleşik bir işlevdir. İki argüman alır: kaynak dosya yolu ve hedef dosya yolu. İşlev, dosyayı kaynak yolundan hedef yola kopyalar. Hedef dosya zaten mevcutsa, uyarı yapılmadan üzerine yazılır.
Aşağıdaki örneği ele alalım:


Bu alt prosedürde, VBA FileCopy işlevini çağırın ve kaynak dosyayı ve hedef dosyayı ayarlayın. Burada, kopyalanacak dosya D sürücüsündedir.

Daha önce verilen dosya adına göre dosyanın bir yerden başka bir yere kopyalandığını görebiliriz. Burada, VBA FileCopy ve Rename uygulanmıştır.
- Not: Aynı kodu birden fazla kez çalıştırırsanız, hedef dizinde dosyanın kopyaları oluşturulmaz, bunun yerine daha önce açıklandığı gibi VBA FileCopy üzerine yazma işlemi tetiklenir.
- FileDialog, dosyaları bir konumdan diğerine kopyalamak için kullanılan yerleşik bir VBA fonksiyonudur.
- Söz dizimi şu şekildedir:
FileCopy SourceFile, DestinationFile. - Hedef dizinin mevcut olduğunu doğrulayın ve gerekirse oluşturun.
- FileCopy, hedef dosya varsa üzerine yazar.
- Dosya öznitelikleri ve izinleri de kopyalanmaz. Eğer ihtiyacınız varsa, gerekirse dosya özniteliklerini ve izinlerini çoğaltın.
Sözdizimi
VBA FileCopy klasörünün sözdizimi şöyledir:
FileCopy SourceFile, DestinationFileNerede,
- SourceFile: Kopyalamak istediğiniz dosyanın yolu ve adıdır.
- DestinationFile: Bu, oluşturmak istediğiniz kopyanın yolu ve adıdır.
Excel VBA FileCopy Fonksiyonu Nasıl Kullanılır?
Tarih Fonksiyonunun uygulandığı bir örnek oluşturmak için aşağıdaki adımları izleyin.
- Bir Excel WorkBook açın ve “Geliştirici” sekmesine tıklayın. Burada, Excel araç çubuğunun en solundaki “Visual Basic”i seçin.


VBA Editörünü açar. Editörün araç çubuğunda “Ekle”ye tıklayın ve ardından açılır bölümde “Modül”ü seçin. Şimdi Excel VBA'da kodlamaya başlayalım.

- Bir dosyayı bir konumdan diğerine kopyalamak için alt rutini adlandırarak başlayın.

- Amacınıza uygun olarak kopyalamak istediğiniz dosyayı sağ tıklayıp “Yol Olarak Kopyala” seçeneğini seçerek seçin.

- Kopyaladığınız yolu VBA FileCopy fonksiyonuna yapıştırın.

- Dosyalara geri dönün ve hedef yolunuzu seçin.

Burada hedef yol “D:\ExcelMojo”dur. - Kopyalanan dosyayı kaydetmek istediğiniz dosya adı ile birlikte hedef yolu yapıştırın.

Not: Hedef için sadece dizin adını yapıştırırsanız, dosya bulunamadı hatası alırsınız.
Kod:
Sub CopyFileExample2()
FileCopy “D:\Excel VBA\example.txt”, “D:\ExcelMojo\copy_example.txt”
End Sub - VBA Editöründeki etkinlik çubuğundaki “F5” veya “Çalıştır” simgesine tıklayın. Bu, “example.txt” dosyasının bir kopyasını hedef klasöre yapıştıracaktır.

Bundan, VBA FileCopy'yi amaçlarımız için nasıl kullanacağımızı biliyoruz. Aşağıda VBA FileCopy kullanan bazı ilginç örnekler görelim.
Örnekler
Bu örneklerde VBA FileCopy ve rename'in farklı kullanım şekillerini görün.
Örnek 1
Bu örnekte, yaptığınız herhangi bir değişikliğin orijinal dosyaya yansıması ve kopyalanan dosyanın aynı kalması için bir Excel CSV dosyasının bir kopyasını aynı klasöre başka bir adla kaydetmek istiyorsunuz. Yedeklemeleri kaydetmek istiyorsanız yararlıdır.
- Adım 1: VBA FileCopy klasörünü kullanarak Excel CSV dosyasını kopyalamak için bir alt rutin tanımlayın.

- Adım 2: Kopyalanacak Excel dosyasının dosya yolunu kopyalayın.

- Adım 3: Kopyalanan dizini VBA FileCopy fonksiyonu ile yapıştırın.

- Adım 4: Seçtiğiniz hedef klasör yolunu kopyalayın.

- Adım 5: Hedef dizini dosya adı da dahil olmak üzere yapıştırın.

Kaynak dosya dizinini ve hedef dosya dizinini virgülle ayırın.
- Adım 6: Dosyanın başarıyla yedeklendiğini belirten bir Mesaj Kutusu fonksiyonu yazın.

Kod:
Sub CopyExcelFilesForBackup()
FileCopy “D:\Excel VBA\autogen_data.csv”, “D:\ExcelMojo\autogen_data_copy.csv”
MsgBox “File backed up successfully!”
End Sub
- Adım 7: Alt rutini çalıştırın. Dosya kopyalamanın yapıldığını belirten bir Mesaj Kutusu görüntülenecektir.


Excel CSV dosyası başarıyla kopyalandı ve kaydedildi.
Örnek 2
Kaynak Yolunu ve Hedef Yolunu Depolamak İçin Değişkenleri Kullanma
Artık dosyaları bir klasörden diğerine nasıl kopyalayacağınızı biliyorsunuz. VBA FileCopy ayrıca birden fazla dosyayı bir klasörden diğerine kopyalayabilir. Bunu nasıl yapacağımızı görelim.
- Adım 1: Birden fazla dosyayı kopyalamak için bir alt rutin başlatın.

- Adım 2: Kaynak ve hedef yolunu depolamak için dize değişkenleri tanımlayın. Her dizi öğesi/dosyası boyunca çalışacak bir fileNames dizisi ve yinelemeli bir değişken tanımlayın.

- Adım 3: Kaynak ve hedef dizini tanımlayın.

- Adım 4: Gösterildiği gibi, diziye kopyalanacak dosya adlarını tanımlayın.

- Adım 5: Dizi içinde yineleme yapmak ve onu gösterildiği gibi kaynak ve hedef klasörlerle birleştirmek için bir FOR döngüsü başlatın.

- Adım 6: Dosyaların başarılı bir şekilde kopyalanıp kopyalanmadığını gösteren bir Mesaj Kutusu fonksiyonu yazın.

Kod:
Sub CopyFiles()
Dim sourcePath As String
Dim destPath As String
Dim fileNames As Variant
Dim fileName As Variant
sourcePath = “D:\Excel VBA\”
destPath = “D:\ExcelMojo\”
fileNames = Array(“phishtank.csv”, “Iris.csv”, “german_credit_data.csv”)
For Each fileName In fileNames
FileCopy sourcePath & fileName, destPath & fileName
Next fileName
MsgBox “Files copied successfully!”
End Sub
- Adım 7: 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.

Hedef klasöre baktığımızda tüm dosyaların başarıyla kopyalandığını görüyoruz.

FileCopy ile ilgili hata
VBA FileCopy kullanırken birçok hatayla karşılaşılır. En yaygın olanlardan bazıları şunlardır:
- Dosya Bulunamadı (Hata 53): FileCopy'de belirtilen kaynak dosya mevcut değilse, "Dosya Bulunamadı" hatasıyla (Hata 53) karşılaşırsınız. Kopyalamaya çalışmadan önce dosyanın mevcut olup olmadığını kontrol etmelisiniz.
Örneğin:

Kopyalanacak dosya klasörde yok. Bu nedenle hata verecektir.

- Yol/Dosya Erişim Hatası (Hata 75) [Path/File Access Error (Error 75)]: Kaynak dosyayı okumak veya hedef dosyaya veya dizine yazmak için gerekli izinlere sahip değilseniz bu hata oluşur. Gerekli izinlere sahip olduğunuzdan emin olun.
Aşağıda görüldüğü gibi, bir dosyayı kısıtlı bir klasöre kopyalamaya çalışırsanız VBA Dosya Kopyalama İzni reddedildi hatası alırsınız.


- Yol Bulunamadı [Path Not Found](Hata 76): FileCopy'de sağlanan kaynak veya hedef yolları geçersizse veya mevcut değilse, "Yol Bulunamadı" hatasıyla (Hata 76) karşılaşırsınız. Doğruluk açısından yolları iki kez kontrol edin.
Örneğin dosya adını tanımlamazsanız bu hatayı alırsınız.

“C:/”nin geçerli bir yol olmadığını biliyoruz. Bu nedenle şu hatayı alıyoruz:

- Dosya Zaten Var (Hata Yok): Hedef dosya zaten varsa, FileCopy herhangi bir hata mesajı olmadan üzerine yazacaktır. Bu davranış dikkatli bir şekilde ele alınmazsa veri kaybına yol açabilir.
- Kullanımdaki Dosya (Hata Yok): Kaynak dosya başka bir uygulama veya kullanıcı tarafından açılırsa sorunlarla karşılaşabilirsiniz. FileCopy dosya kilitlerini veya açık dosya tutamaçlarını kontrol etmez ve eksik veya bozuk kopyalarla sonuçlanabilir.
- Uzun Dosya Yolları: Uzun dosya yolları veya adları bazen dosyaları kopyalarken, özellikle ağ yollarıyla uğraşırken sorunlara neden olabilir. Geçerli ve erişilebilir yollar kullandığınızdan emin olun.
- Dosya Kopyalama Kesintiye Uğradı (Hata Yok): Kopyalama işlemi sırasında herhangi bir kesinti olursa (örneğin sistem çökmesi, programın aniden sonlanması), Dosya Kopyalama tamamlanmayabilir veya dosyanın bozulmasına neden olabilir.
Dikkat Edilmesi Gereken Önemli Noktalar
- Kopyalamadan önce kaynak dosyanın varlığını doğrulayın.
- Dosya kilitlerine dikkat edin; kaynak dosya başka bir uygulama veya kullanıcı tarafından açıksa, kopyalama işlemi sırasında sorunlara yol açabilir.
- Dosya adları dahil olmak üzere kaynak ve hedef dosya yollarının işletim sisteminin sınırlamaları dahilinde olduğundan emin olun.
- Kopyalama işlemi sırasında herhangi bir kesinti olursa (örneğin sistem çökmesi veya programın aniden sonlanması), Dosya Kopyalama işlemi tamamlanmayabilir veya dosyanın bozulmasına neden olabilir.
- FileCopy'nin dosya özniteliklerini veya izinlerini kopyalamadığını unutmayın. Bu öznitelikler kritikse, kopyalanan dosyada bunları çoğaltmak için ek adımlar gerekebilir.
- Uygun dosya yollarını kullanın; mümkünse geçerli ve erişilebilir ağ yollarını da kullanın.
- Kodunuzun beklendiği gibi davrandığından emin olmak için farklı dosya türleri, boyutları ve konumları da dahil olmak üzere çeşitli senaryolarla kodunuzu kapsamlı bir şekilde test edin.
