Meng-copy file dari satu folder ke folder lain dalam satu komputer atau dari satu komputer ke komputer lain dalam sebuah jaringan adalah hal yang biasa kita lakukan saat kita berinteraksi dengan komputer. Bila sudah terbiasa menggunakan Windows Explorer untuk meng-copy file, maka ada baiknya kita mencoba membuat sendiri cara meng-copy file dengan menggunakan metode CopyFile yang disediakan FileSystemObject di Access.
Syntax penulisan metode CopyFile adalah sebagai berikut:
Nama sumber dari file, termasuk nama path di dalamnya. Path dari sumber file ini bisa berupa nama local path bila beara di komputer lokal atau UNC path bila berada dalam jaringan. Contohnya: D:\User\UserA\LogUserA201512.txt (local path) atau \\Server1\User\UserA\LogUserA201512.txt (UNC path).
Nama target path dari file yang ingin di-copy. Sama seperti nama sumber, bisa berupa nama local path atau UNC path seperti contoh di atas. Untuk meng-copy file agar nama file target sama dengan sumber, kita mesti menambahkan backslash ("\") setelah nama folder target. Contohnya seperti ini:
Satu paramatere yang bersifat optional yaitu Overwrite, bisa bernilai True atau False. Secara default, Overwite bernilai False. Dengan demikian, metode CopyFile tidak mem-paste hasil copy-an jika ada nama file yang sama di folder target, sehingga kita tidak bisa mengganti file lama dengan file yang baru. Supaya file lama bisa diganti dengan file yang baru, maka parameter Overwrite pada metode CopyFile harus diberi nilai True. Contohnya seperti ini:
File yang ingin di=copy: D:\User\UserA\LogUserA201512.txt
Folder target: D:\User\UserC\
Jadi misalkan di folder target sudah ada nama file LogUserA201512.txt, maka parameter Overwrite harus diberi nilai True seperti metode CopyFile berikut ini:
Metode CopyFile dengan parameter Overwrite bernilai True juga tidak akan bisa dieksekusi sampai selesai jika file yang akan ditimpa/diganti mempunyai atribut read-only. Agar sumber file berhasil di-copy di target, maka file yang mempunyai atribut read-only itu harus dihapus terlebih dahulu. Setelah itu, metode CopyFile dieksekusi.
File sumber yang ingin dikopi ada di folder "D:\SoftwareAkuntansi\ElexMedia2" beserta subfolder yang ada di bawahnya. Folder target adalah "D:\User\UserA\" sedangkan kata kunci yang dipakai adalah "akun" Jadi, dengan menggunakan statement for each... next dan rekursi, kita mencari name file yang mengandung kata kunci "akun". Bila kata kunci "akun" ditemukan dalam nama file, maka file yang mengandung kata kunci "akun" ini akan dikopi ke folder target "D:\User\UserA\" seperti terlihat di gambar 1.
Pada Immediate Window, semua file yang berekstensi *.txt dalam folder/subfolder "D:\SoftwareAkuntansi\ElexMedia2" dikopi target "D:\User\UserA\".
Syntax penulisan metode CopyFile adalah sebagai berikut:
Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFile Nama sumber file, Nama target, Overwrite (optional)Metode CopyFile mempunyai dua parameter yang harus ada dan satu parameter yang sifatnya optional atau tidak diharuskan. Parameter itu adalah sebagai berikut:
Nama sumber dari file, termasuk nama path di dalamnya. Path dari sumber file ini bisa berupa nama local path bila beara di komputer lokal atau UNC path bila berada dalam jaringan. Contohnya: D:\User\UserA\LogUserA201512.txt (local path) atau \\Server1\User\UserA\LogUserA201512.txt (UNC path).
Nama target path dari file yang ingin di-copy. Sama seperti nama sumber, bisa berupa nama local path atau UNC path seperti contoh di atas. Untuk meng-copy file agar nama file target sama dengan sumber, kita mesti menambahkan backslash ("\") setelah nama folder target. Contohnya seperti ini:
objFSO.CopyFile "D:\User\UserA\LogUserA201512.txt" , "D:\User\UserC\"Bila ingin memberi nama file baru di folder target, tambahkanlah nama file yang baru nama path target, contohnya seperti ini:
objFSO.CopyFile "D:\User\UserA\LogUserA201512.txt" , "D:\User\UserC\LogUserA201512baru.txt"Jika nama path target tidak ada, maka FileSystemObject otomatis akan membuat nama path itu.
Satu paramatere yang bersifat optional yaitu Overwrite, bisa bernilai True atau False. Secara default, Overwite bernilai False. Dengan demikian, metode CopyFile tidak mem-paste hasil copy-an jika ada nama file yang sama di folder target, sehingga kita tidak bisa mengganti file lama dengan file yang baru. Supaya file lama bisa diganti dengan file yang baru, maka parameter Overwrite pada metode CopyFile harus diberi nilai True. Contohnya seperti ini:
File yang ingin di=copy: D:\User\UserA\LogUserA201512.txt
Folder target: D:\User\UserC\
Jadi misalkan di folder target sudah ada nama file LogUserA201512.txt, maka parameter Overwrite harus diberi nilai True seperti metode CopyFile berikut ini:
Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.CopyFile "D:\User\UserA\LogUserA201512.txt" , "D:\User\UserC\", TrueHarap selalu diingat bahwa agar parameter Overwrite bisa berfungsi untuk meng-copy file dengan cara mengganti/menimpa file lama dengan file baru, maka tanda backslash ("\") harus diikutsertakan seperti contoh di atas. Jika backslash tidak diikutsertakan, maka metode CopyFile akan membuat file baru dengan nama D:\User\UserC. Bila folder D:\User\UserC sudah ada, maka akan muncul peringatan kesalahan "Permission denied error" dan metode CopyFile tidak bisa dieksekusi sampai selesai.
Metode CopyFile dengan parameter Overwrite bernilai True juga tidak akan bisa dieksekusi sampai selesai jika file yang akan ditimpa/diganti mempunyai atribut read-only. Agar sumber file berhasil di-copy di target, maka file yang mempunyai atribut read-only itu harus dihapus terlebih dahulu. Setelah itu, metode CopyFile dieksekusi.
Meng-copy beberapa macam file sekaligus
Ada beberapa cara untuk meng-copy beberapa file secara sekaligus:- Menggunakan wildcard
- Menggunakan statement for each ... next
- Kombinasi wildcard dan for each ... next
Meng-copy file dengan menggunakan wildcard
Wildcard dapat digunakan untuk meng-copy file sumber yang berada dalam folder yang sama ke folder target yang berbeda. Wildcard digunakan untuk meng-copy file sumber yang namanya mempunyai pola tertentu seperti:- berekstensi .txt, .tmp, .docx, .jpg, .bmp, dan sebagainya, contoh: *.txt, *.tmp, *.docx, *.jpg, dan *.bmp. Contoh:
objFSO.CopyFile "D:\UserAS\UserA\*.txt","D:\User\UserA\" , True
- mengandung pola seperti ini: Log*.txt yang artinya 3 huruf pertama adalah "Log" diikuti sembarang huruf dan ekstensi filenya adalah .txt. Contoh:
objFSO.CopyFile "D:\UserAS\UserA\Log*.txt","D:\User\UserA\" , True
- mengandung pola seperti ini: ???11.txt yang artinya diawali dengan 3 karakter sembarang, diakhiri dengan 11, dan ekstensi filenya adalah .txt. Contoh:
objFSO.CopyFile "D:\UserAS\UserA\???11.txt","D:\User\UserA\" , True
- mengandung pola seperti ini: ????????2015*.txt yang artinya diawali dengan 8 karakter sembarang, diikuti karakter berupa angka "2015", diakhiri dengan sembarang karakter, dan ekstensi filenya adalah .txt. Contoh:
objFSO.CopyFile "D:\UserAS\UserA\????????2015*.txt","D:\User\UserA\" , True
- mengandung pola seperti ini: ????????2015*.*yang artinya diawali dengan 8 karakter sembarang, diikuti karakter berupa angka "2015", diakhiri dengan sembarang karakter, dan apa pun ekstensi filenya. Contoh:
objFSO.CopyFile "D:\UserAS\UserA\????????2015*.*","D:\User\UserA\" , True
Meng-copy file dengan menggunakan statement for each ... next
Dengan menggunakan statement for each ... next, kita dapat meng-copy berbagai macam file yang sumbernya bisa berasal dari berbagai macam folder ke folder target yang diinginkan. Untuk memudahkan pemahaman, kita dapat membuat kode VBA sebagai berikut:Function kopiFile(strSumber As String, strTarget As String, strKataKunci As String) '------------------------------------------ ' Fungsi untuk meng-copy file dengan menggunakan metode CopyFile ' Jangan dipergunakan sembarangan, ' karena file yang sudah tertimpa hasil copy-an tidak bisa di-restore. '------------------------------------------ Dim objFSO, objFolder, colSubfolders, objFile As Object Dim arrNamaFile As String Dim boolFileHapus As Boolean Set objFSO = CreateObject("Scripting.FileSystemObject") If Not objFSO.FolderExists(strSumber) Then Debug.Print strSumber & " tidak ada" Cancel = True Exit Function End If Set objFolder = objFSO.GetFolder(strSumber) For Each objFile In objFolder.Files If InStr(1, objFile.Name, strKataKunci) Then ' Jika ada file di folder target, maka lakukan proses berikut ini If objFSO.FileExists(strTarget & objFile.Name) Then boolFileHapus = False If (objFSO.Getfile(strTarget & objFile.Name).Attributes And 1) Then ' Jika file yang ada di folder target beratribut Read-only, maka file tidak di-copy ' tetapi dilanjutkan ke proses berikutnya. boolFileHapus = False Else ' Jika file yang ada di folder target tidak beratribut Read-only, maka file dapat ditimpa ' dengan menampilkan Message Box yang meminta persetujuan (OK) atau pembatalan (Cancel). If MsgBox("File " & objFile.Name & _ " sudah ada, apakah ingin diganti (OK=Setuju, Cancel=Abaikan dan lanjut ke proses berikutnya)?", _ vbOKCancel) = vbOK Then boolFileHapus = True End If End If Else boolFileHapus = True End If If boolFileHapus = True Then objFSO.CopyFile objFile.Path, strTarget, True Debug.Print objFile.Path & " di-copy ke " & strTarget End If End If Next objFile Set colSubfolders = objFolder.SubFolders For Each objSubFolder In colSubfolders For Each objFile In objSubFolder.Files If InStr(1, objFile.Name, strKataKunci) Then ' Jika ada file di folder target, maka lakukan proses berikut ini If objFSO.FileExists(strTarget & objFile.Name) Then boolFileHapus = False If (objFSO.Getfile(strTarget & objFile.Name).Attributes And 1) Then ' Jika file yang ada di folder target beratribut Read-only, maka file tidak di-copy ' tetapi dilanjutkan ke proses berikutnya. boolFileHapus = False Else ' Jika file yang ada di folder target tidak beratribut Read-only, maka file dapat ditimpa ' dengan menampilkan Message Box yang meminta persetujuan (OK) atau pembatalan (Cancel). If MsgBox("File " & objFile.Name & _ " sudah ada, apakah ingin diganti (OK=Setuju, Cancel=Abaikan dan lanjut ke proses berikutnya)?", _ vbOKCancel) = vbOK Then boolFileHapus = True End If End If Else boolFileHapus = True End If If boolFileHapus = True Then objFSO.CopyFile objFile.Path, strTarget, True Debug.Print objFile.Path & " di-copy ke " & strTarget End If End If Next objFile kopiFile objSubFolder.Path, strTarget, strKataKunci Next objSubFolder End FunctionFungsi kopiFile di atas digunakan untuk meng-copy file dari folder strSumber ke folder strTarget dengan kata kunci strKataKunci. Pada fungsi itu, kita meng-copy file yang di dalam namanya mengandung strKataKunci itu. Sebagai contoh, fungsi kopiFile seperti gambar Immediate Window di bawah ini.
Gambar 1. Immediate window fungsi kopiFile |
File sumber yang ingin dikopi ada di folder "D:\SoftwareAkuntansi\ElexMedia2" beserta subfolder yang ada di bawahnya. Folder target adalah "D:\User\UserA\" sedangkan kata kunci yang dipakai adalah "akun" Jadi, dengan menggunakan statement for each... next dan rekursi, kita mencari name file yang mengandung kata kunci "akun". Bila kata kunci "akun" ditemukan dalam nama file, maka file yang mengandung kata kunci "akun" ini akan dikopi ke folder target "D:\User\UserA\" seperti terlihat di gambar 1.
Meng-copy file dengan menggunakan kombinasi wildcard dan statement for each ... next
Bila hanya menggunakan wildcard, kita hanya bisa meng-copy file yang ada dalam sebuah folder, maka dengan menggunakan kombinasi antara wildcard dan statement for each ... next, maka kita bisa meng-copy file yang mempunyai pola tertentu sesuai dengan wildcard untuk setiap folder dan subfolder yang diinginkan. Meng-copy file dengan wildcard seperti dijelaskan di atas dapat diaplikasikan ke setiap folder/subfolder dengan menggunakan statement for each ... next seperti pada kode VBA berikut ini.Function kopiFileWildCard(strSumber As String, strTarget As String, strKataKunci As String) '------------------------------------------ ' Fungsi untuk meng-copy file dengan menggunakan metode CopyFile ' Jangan dipergunakan sembarangan, ' karena file yang sudah tertimpa hasil copy-an tidak bisa di-restore. '------------------------------------------ Dim objFSO, objFolder, colSubfolders, objFile As Object Dim arrNamaFile As String Dim boolFileHapus As Boolean Set objFSO = CreateObject("Scripting.FileSystemObject") If Not objFSO.FolderExists(strSumber) Then Debug.Print strSumber & " tidak ada" Cancel = True Exit Function End If Set objFolder = objFSO.GetFolder(strSumber) If Dir(strSumber & "\" & strKataKunci) <> vbNullString Then Debug.Print strSumber & "\" & strKataKunci objFSO.CopyFile strSumber & "\" & strKataKunci, strTarget, True End If Set colSubfolders = objFolder.SubFolders For Each objSubFolder In colSubfolders kopiFileWildCard objSubFolder.Path, strTarget, strKataKunci Next objSubFolder End FunctionFungsi kopiFileWildCard di atas digunakan untuk meng-copy file dari folder strSumber ke folder strTarget dengan wildcard yang dinyatakan oleh variabel strKataKunci. Pada fungsi itu, kita meng-copy file yang sesuai dengan wildcard dalam strKataKunci. Sebagai contoh, fungsi kopiFileWildCard seperti gambar Immediate Window di bawah ini. File sumber yang ingin dikopi ada di folder "D:\SoftwareAkuntansi\ElexMedia2" beserta subfolder yang ada di bawahnya dan targetnya adalah "D:\User\UserA\". Sedangkan wildcardnya adalah "*.txt".
Gambar 1. Immediate window fungsi kopiFileWildCard |
Pada Immediate Window, semua file yang berekstensi *.txt dalam folder/subfolder "D:\SoftwareAkuntansi\ElexMedia2" dikopi target "D:\User\UserA\".
Comments
Post a Comment