Skip to main content

Meng-copy File Menggunakan FileSystemObject di Access

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:
  1. Set objFSO = CreateObject("Scripting.FileSystemObject")  
  2. 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:
  1. 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:
  1. 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:
  1. Set objFSO = CreateObject("Scripting.FileSystemObject")  
  2. objFSO.CopyFile "D:\User\UserA\LogUserA201512.txt" , "D:\User\UserC\"True  
Harap 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:
  1. Menggunakan wildcard
  2. Menggunakan statement for each ... next
  3. 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:
  1. berekstensi .txt, .tmp, .docx, .jpg, .bmp, dan sebagainya, contoh: *.txt, *.tmp, *.docx, *.jpg, dan *.bmp. Contoh:
    1. objFSO.CopyFile "D:\UserAS\UserA\*.txt","D:\User\UserA\" , True  
  2. mengandung pola seperti ini: Log*.txt yang artinya 3 huruf pertama adalah "Log" diikuti sembarang huruf dan ekstensi filenya adalah .txt. Contoh:
    1. objFSO.CopyFile "D:\UserAS\UserA\Log*.txt","D:\User\UserA\" , True  
  3. mengandung pola seperti ini: ???11.txt yang artinya diawali dengan 3 karakter sembarang, diakhiri dengan 11, dan ekstensi filenya adalah .txt. Contoh:
    1. objFSO.CopyFile "D:\UserAS\UserA\???11.txt","D:\User\UserA\" , True  
  4. 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:
    1. objFSO.CopyFile "D:\UserAS\UserA\????????2015*.txt","D:\User\UserA\" , True  
  5. 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:
    1. objFSO.CopyFile "D:\UserAS\UserA\????????2015*.*","D:\User\UserA\" , True  
Penggunaan wildcard pada metode CopyFile memungkinkan kita untuk meng-copy semua file dengan pola seperti di atas tanpa meng-copy subfolder yang ada dalam folder sumber. Hal ini berbeda dengan metode CopyFolder, yang akan meng-copy seluruh file dan subfolder yang ada dalam folder sumber.

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:
  1. Function kopiFile(strSumber As String, strTarget As String, strKataKunci As String)  
  2. '------------------------------------------  
  3. ' Fungsi untuk meng-copy file dengan menggunakan metode CopyFile  
  4. ' Jangan dipergunakan sembarangan,  
  5. ' karena file yang sudah tertimpa hasil copy-an tidak bisa di-restore.  
  6. '------------------------------------------  
  7.   Dim objFSO, objFolder, colSubfolders, objFile As Object  
  8.   Dim arrNamaFile As String  
  9.   Dim boolFileHapus As Boolean  
  10.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  11.   If Not objFSO.FolderExists(strSumber) Then  
  12.     Debug.Print strSumber & " tidak ada"  
  13.     Cancel = True  
  14.     Exit Function  
  15.   End If  
  16.   Set objFolder = objFSO.GetFolder(strSumber)  
  17.     
  18.     For Each objFile In objFolder.Files  
  19.       If InStr(1, objFile.Name, strKataKunci) Then  
  20. ' Jika ada file di folder target, maka lakukan proses berikut ini  
  21.         If objFSO.FileExists(strTarget & objFile.Name) Then  
  22.           boolFileHapus = False  
  23.           If (objFSO.Getfile(strTarget & objFile.Name).Attributes And 1) Then  
  24. ' Jika file yang ada di folder target beratribut Read-only, maka file tidak di-copy  
  25. ' tetapi dilanjutkan ke proses berikutnya.  
  26.             boolFileHapus = False  
  27.           Else  
  28. ' Jika file yang ada di folder target tidak beratribut Read-only, maka file dapat ditimpa  
  29. ' dengan menampilkan Message Box yang meminta persetujuan (OK) atau pembatalan (Cancel).  
  30.             If MsgBox("File " & objFile.Name & _  
  31.             " sudah ada, apakah ingin diganti (OK=Setuju, Cancel=Abaikan dan lanjut ke proses berikutnya)?", _  
  32.             vbOKCancel) = vbOK Then  
  33.               boolFileHapus = True  
  34.             End If  
  35.           End If  
  36.         Else  
  37.           boolFileHapus = True  
  38.         End If  
  39.         If boolFileHapus = True Then  
  40.           objFSO.CopyFile objFile.Path, strTarget, True  
  41.           Debug.Print objFile.Path & " di-copy ke " & strTarget  
  42.         End If  
  43.       End If  
  44.     Next objFile  
  45.   
  46.   Set colSubfolders = objFolder.SubFolders  
  47.   For Each objSubFolder In colSubfolders  
  48.     For Each objFile In objSubFolder.Files  
  49.       If InStr(1, objFile.Name, strKataKunci) Then  
  50. ' Jika ada file di folder target, maka lakukan proses berikut ini  
  51.         If objFSO.FileExists(strTarget & objFile.Name) Then  
  52.           boolFileHapus = False  
  53.           If (objFSO.Getfile(strTarget & objFile.Name).Attributes And 1) Then  
  54. ' Jika file yang ada di folder target beratribut Read-only, maka file tidak di-copy  
  55. ' tetapi dilanjutkan ke proses berikutnya.  
  56.             boolFileHapus = False  
  57.           Else  
  58. ' Jika file yang ada di folder target tidak beratribut Read-only, maka file dapat ditimpa  
  59. ' dengan menampilkan Message Box yang meminta persetujuan (OK) atau pembatalan (Cancel).  
  60.             If MsgBox("File " & objFile.Name & _  
  61.             " sudah ada, apakah ingin diganti (OK=Setuju, Cancel=Abaikan dan lanjut ke proses berikutnya)?", _  
  62.             vbOKCancel) = vbOK Then  
  63.               boolFileHapus = True  
  64.             End If  
  65.           End If  
  66.         Else  
  67.           boolFileHapus = True  
  68.         End If  
  69.         If boolFileHapus = True Then  
  70.           objFSO.CopyFile objFile.Path, strTarget, True  
  71.           Debug.Print objFile.Path & " di-copy ke " & strTarget  
  72.         End If  
  73.       End If  
  74.     Next objFile  
  75.     kopiFile objSubFolder.Path, strTarget, strKataKunci  
  76.   Next objSubFolder  
  77. End Function  
Fungsi 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.
  1. Function kopiFileWildCard(strSumber As String, strTarget As String, strKataKunci As String)  
  2. '------------------------------------------  
  3. ' Fungsi untuk meng-copy file dengan menggunakan metode CopyFile  
  4. ' Jangan dipergunakan sembarangan,  
  5. ' karena file yang sudah tertimpa hasil copy-an tidak bisa di-restore.  
  6. '------------------------------------------  
  7.   Dim objFSO, objFolder, colSubfolders, objFile As Object  
  8.   Dim arrNamaFile As String  
  9.   Dim boolFileHapus As Boolean  
  10.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  11.   If Not objFSO.FolderExists(strSumber) Then  
  12.     Debug.Print strSumber & " tidak ada"  
  13.     Cancel = True  
  14.     Exit Function  
  15.   End If  
  16.   Set objFolder = objFSO.GetFolder(strSumber)  
  17.   If Dir(strSumber & "\" & strKataKunci) <> vbNullString Then  
  18.     Debug.Print strSumber & "\" & strKataKunci  
  19.     objFSO.CopyFile strSumber & "\" & strKataKunci, strTarget, True  
  20.   End If  
  21.   Set colSubfolders = objFolder.SubFolders  
  22.   For Each objSubFolder In colSubfolders  
  23.     kopiFileWildCard objSubFolder.Path, strTarget, strKataKunci  
  24.   Next objSubFolder  
  25. End Function  
Fungsi 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

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Cara Sederhana Membuat Fungsi Terbilang di MS Acess VBA

Fungsi Untuk Membuka Database di Access VBA