Skip to main content

Memindahkan FIle dan Mengganti Nama File Menggunakan FileSystemObject di Access

Selain dihapus, sebuah file mungkin juga dipindahkan ke media penyimpanan yang lain. Tujuannya, untuk mengurangi beban media penyimpanan yang sedang dipakai. Umumnya, file yang sudah jarang dibuka tetapi masih dianggap penting disimpan dalam media penyimpanan lainnya seperti di CD atau pita magnetis lainnya. Selain mengurangi beban, memindahkan file juga membuat kapasitas media penyimpanan yang dipakai menjadi lebih banyak, sehingga proses memuat data juga akan berjalan lebih cepat.

Dengan menggunakan FileSystemObject, kita bisa memindahkan file yang sudah tidak terpakai. Metode yang digunakan adalah MoveFile. Metode MoveFile memungkinkan kita memindahkan satu atau lebih file dari satu lokasi ke lokasi lainnya. Untuk memindahkan file dengan MoveFile, kita bisa menggunakan dua parameter, yaitu:
  1. Sumber file yang berisi nama path lengkap dari file yang ingin dipindahkan.
  2. Target lokasi yang berupa nama path untuk memindahkan file. Target lokasi ini diakhiri dengan tanda backslash ("\")
Syntax penulisan metode MoveFile adalah sebagai berikut:
  1. Set objFSO = CreateObject("Scripting.FileSystemObject")  
  2. objFSO.MoveFile Nama sumber file, Nama target  
Berikut ini adalah contoh kode untuk memindahkan file dari sumber file "D:\User\UserA\UserLog.txt" ke target lokasi "D:\UserB\"
  1. Set objFSO = CreateObject("Scripting.FileSystemObject")  
  2. objFSO.MoveFile "D:\User\UserA\UserLog.txt" , "D:\UserB\"  

Memindahkan beberapa macam file sekaligus

Ada beberapa cara untuk memindahkan beberapa macam file secara sekaligus:
  1. Menggunakan wildcard
  2. Menggunakan statement for each ... next
  3. Kombinasi wildcard dan for each ... next

Memindahkan file dengan menggunakan wildcard

Kita dapat menggunakan wildcard untuk memindahkan file dalam jumlah banyak. Berikut ini contoh pemindahan sejumlah file dengan menggunakan wildcard dan mempunyai pola seperti:
  1. berekstensi .txt, .tmp, .docx, .jpg, .bmp, dan sebagainya, contoh: *.txt, *.tmp, *.docx, *.jpg, dan *.bmp. Contoh:
    1. objFSO.MoveFile"D:\UserAS\UserA\*.txt","D:\User\UserA\"  
  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.MoveFile"D:\UserAS\UserA\Log*.txt","D:\User\UserA\"  
  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.MoveFile"D:\UserAS\UserA\???11.txt","D:\User\UserA\"  
  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.MoveFile"D:\UserAS\UserA\????????2015*.txt","D:\User\UserA\"  
  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.MoveFile"D:\UserAS\UserA\????????2015*.*","D:\User\UserA\"  

Memindahkan file dengan menggunakan statement for each ... next

Dengan menggunakan statement for each ... next, kita dapat memindahkan berbagai macam file yang sumbernya bisa berasal dari berbagai macam folder ke target yang diinginkan. Untuk memudahkan pemahaman, kita dapat membuat kode VBA sebagai berikut:
  1. Function pindahFile(strSumber As String, strTarget As String, strKataKunci As String)  
  2. '------------------------------------------  
  3. ' Fungsi untuk memindahkan file dengan menggunakan metode MoveFile  
  4. ' Jangan dipergunakan sembarangan,  
  5. ' karena file yang sudah dipindahkan mungkin akan menimpa  
  6. ' file dengan nama yang sama sehingga tidak bisa di-restore.  
  7. ' ?pindahFile("D:\User\UserA\","D:\UserB", "menu")  
  8.   
  9. '------------------------------------------  
  10.   Dim objFSO, objFolder, colSubfolders, objFile As Object  
  11.   Dim arrNamaFile As String  
  12.   Dim boolFileHapus As Boolean  
  13.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  14.   If Not objFSO.FolderExists(strSumber) Then  
  15.     Debug.Print strSumber & " tidak ada"  
  16.     Cancel = True  
  17.     Exit Function  
  18.   End If  
  19.   Set objFolder = objFSO.GetFolder(strSumber)  
  20.     
  21.     For Each objFile In objFolder.Files  
  22.       If InStr(1, objFile.Name, strKataKunci) Then  
  23. ' Jika ada file di folder target, maka lakukan proses berikut ini  
  24.         If objFSO.FileExists(strTarget & objFile.Name) Then  
  25.           boolFileHapus = False  
  26.           If (objFSO.GetFile(strTarget & objFile.Name).Attributes And 1) Then  
  27. ' Jika file yang ada di folder target beratribut Read-only, maka file tidak dipindahkan  
  28. ' tetapi dilanjutkan ke proses berikutnya.  
  29.             boolFileHapus = False  
  30.           Else  
  31. ' Jika file yang ada di folder target tidak beratribut Read-only, maka file dapat ditimpa  
  32. ' dengan menampilkan Message Box yang meminta persetujuan (OK) atau pembatalan (Cancel).  
  33.             If MsgBox("File " & objFile.Name & _  
  34.             " sudah ada, apakah ingin diganti (OK=Setuju, Cancel=Abaikan dan lanjut ke proses berikutnya)?", _  
  35.             vbOKCancel) = vbOK Then  
  36.               boolFileHapus = True  
  37.             End If  
  38.           End If  
  39.         Else  
  40.           boolFileHapus = True  
  41.         End If  
  42.         If boolFileHapus = True Then  
  43.           Debug.Print objFile.Path & " dipindah ke " & strTarget  
  44.           objFSO.MoveFile objFile.Path, strTarget  
  45.         End If  
  46.       End If  
  47.     Next objFile  
  48.     
  49.     
  50.   Set colSubfolders = objFolder.SubFolders  
  51.   For Each objSubFolder In colSubfolders  
  52.     For Each objFile In objSubFolder.Files  
  53.       If InStr(1, objFile.Name, strKataKunci) Then  
  54. ' Jika ada file di folder target, maka lakukan proses berikut ini  
  55.         If objFSO.FileExists(strTarget & objFile.Name) Then  
  56.           boolFileHapus = False  
  57.           If (objFSO.GetFile(strTarget & objFile.Name).Attributes And 1) Then  
  58. ' Jika file yang ada di folder target beratribut Read-only, maka file tidak dipindahkan  
  59. ' tetapi dilanjutkan ke proses berikutnya.  
  60.             boolFileHapus = False  
  61.           Else  
  62. ' Jika file yang ada di folder target tidak beratribut Read-only, maka file dapat ditimpa  
  63. ' dengan menampilkan Message Box yang meminta persetujuan (OK) atau pembatalan (Cancel).  
  64.             If MsgBox("File " & objFile.Name & _  
  65.             " sudah ada, apakah ingin diganti (OK=Setuju, Cancel=Abaikan dan lanjut ke proses berikutnya)?", _  
  66.             vbOKCancel) = vbOK Then  
  67.               boolFileHapus = True  
  68.             End If  
  69.           End If  
  70.         Else  
  71.           boolFileHapus = True  
  72.         End If  
  73.         If boolFileHapus = True Then  
  74.           Debug.Print objFile.Path & " dipindah ke " & strTarget  
  75.           objFSO.MoveFile objFile.Path, strTarget  
  76.         End If  
  77.       End If<span id="goog_476085906"></span><span id="goog_476085907"></span>  
  78.     Next objFile  
  79.     pindahFile objSubFolder.Path, strTarget, strKataKunci  
  80.   Next objSubFolder  
  81. End Function  
Fungsi pindahFile di atas digunakan untuk memindahkan file dari folder strSumber ke folder strTarget dengan kata kunci strKataKunci. Pada fungsi itu, kita memindahkan file yang di dalam namanya mengandung strKataKunci itu. Sebagai contoh, fungsi pndahFile seperti gambar Immediate Window di bawah ini.

Gambar 1. Immediate window untuk memindahkan file statement for each ... next pada fungsi pindahFile

File sumber yang ingin pindahkan ada di folder "D:\User\UserA\" beserta subfolder yang ada di bawahnya. Folder target adalah "D:\UserB\" sedangkan kata kunci yang dipakai adalah "menu" Jadi, dengan menggunakan statement for each... next dan rekursi, kita mencari name file yang mengandung kata kunci "menu". Bila kata kunci "menu" ditemukan dalam nama file, maka file yang mengandung kata kunci "menu" ini akan dipindahkan ke folder target "D:\UserB\" seperti terlihat di gambar 1.

Memindahkan file dengan menggunakan kombinasi wildcard dan statement for each ... next

Dengan menggunakan kombinasi antara wildcard dan statement for each ... next, maka kita bisa memindahkan file yang mempunyai pola tertentu sesuai dengan wildcard pada setiap folder dan subfolder yang diinginkan. Memindahkan 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 pindahFileWildCard(strSumber As String, strTarget As String, strKataKunci As String)  
  2. '------------------------------------------  
  3. ' Fungsi untuk memindahkan file dengan menggunakan metode MoveFile  
  4. ' Jangan dipergunakan sembarangan,  
  5. ' karena file yang sudah dipindahkan mungkin akan menimpa  
  6. ' file dengan nama yang sama sehingga tidak bisa di-restore.  
  7. '------------------------------------------  
  8.   Dim objFSO, objFolder, colSubfolders, objFile As Object  
  9.   Dim arrNamaFile As String  
  10.   Dim boolFileHapus As Boolean  
  11.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  12.   If Not objFSO.FolderExists(strSumber) Then  
  13.     Debug.Print strSumber & " tidak ada"  
  14.     Cancel = True  
  15.     Exit Function  
  16.   End If  
  17.   Set objFolder = objFSO.GetFolder(strSumber)  
  18.   If Dir(strSumber & "\" & strKataKunci) <> vbNullString Then  
  19.     Debug.Print strSumber & "\" & strKataKunci & " dipindah ke " & strTarget  
  20.     objFSO.MoveFile strSumber & "\" & strKataKunci, strTarget  
  21.   End If  
  22.   Set colSubfolders = objFolder.SubFolders  
  23.   For Each objSubFolder In colSubfolders  
  24.     pindahFileWildCard objSubFolder.Path, strTarget, strKataKunci  
  25.   Next objSubFolder  
  26. End Function  
Fungsi pindahFileWildCard di atas digunakan untuk memindahkan file dari folder strSumber ke folder strTarget dengan wildcard yang dinyatakan oleh variabel strKataKunci. Pada fungsi itu, kita memindahkan file yang sesuai dengan wildcard dalam strKataKunci. Sebagai contoh, fungsi pindahFileWildCard seperti gambar Immediate Window di bawah ini. File sumber yang ingin dikopi ada di folder "D:\UserB" beserta subfolder yang ada di bawahnya dan targetnya adalah "D:\User\UserA\". Sedangkan wildcardnya adalah "*.txt".

Gambar 2. . Immediate window untuk memindahkan file dengan kombinasi wildcard dan statement for each ... next


Pada Immediate Window, semua file yang berekstensi *.txt dalam folder/subfolder "D:\UserB" dipindahkan ke target "D:\User\UserA\".

Kelemahan metode MoveFile

Walaupun nampak praktis, metode MoveFile untuk memindahkan file dari satu folder ke folder lainnya mempunyai kelemahan:
  1. Bila di dalam target lokasi (path) sudah ada file yang namanya sama dengan file sumber, maka metode MoveFile tidak bisa menimpa (overwrite) file yang sudah ada di target, seperti metode CopyFile.
  2. Bila ada kegagalan dalam proses pemindahan file (misalnya karena gangguan jaringan, listrik padam mendadak sementara komputer tidak menggunakan UPS, dan sebagainya), maka pemindahan file dengan menggunakan metode MoveFile dapat merusak file yang dipindahkan.
Mengingat dua kelemahan di atas, maka cara terbaik untuk memindahkan file adalah dengan melalui dua tahap:
  1. Meng-copy file yang ingin dipindahkan dari file sumber ke target dengan menggunakan metode CopyFile.
  2. Pada saat yang sama menghapus file yang ada di file sumber dengan menggunakan metode DeleteFile.

Mengganti nama file

FileSystemObject tidak mempunyai metode khusus yang digunakan untuk mengganti nama file. Untuk mengganti nama file, kita menggunakan metode MoveFile seperti cara di atas. Caranya, parameter kedua, yaitu target lokasi mempunyai nama yang sama dengan parameter pertama, yaitu sumber lokasi (bukan nama file). Contohnya seperti berikut ini:
  1. objFSO.MoveFile "D:\UserAS\UserA\UserA.txt","D:\UserAS\UserA\UserA1.txt"  
Bila ukuran file yang ingin diganti namanya cukup besar atau jaringan tidak cukup mendukung, maka kita bisa menggunakan metode CopyFile di folder yang sama dengan nama yang berbeda, lalu hapus file yang dikopi dengan menggunakan metode DeleteFile.

Comments

  1. pak yanto, saya masih bingung untuk scrip memilih files dalam folder maupun subfolder, pemikiran saya jika kita klik folder maka seluruh isi files baik dalam folder maupun subfolder tersebut dapat langsung dipindah atau dicopy, yang sekarang saya lakukan adalah saya masuk subfolder terlebih dahulu kemudian memilih satu atau banyak files baru kemudian proses dijalankan. terima kasih

    ReplyDelete
    Replies
    1. Kalau untuk memindah atau mengcopy folder pakai metode copyfolder di sini contohnya: http://access-terapan.blogspot.co.id/2016/02/melakukan-proses-editing-folder-dengan.html. kalau mau memindahkan, jangan langsung dipindah dengan metode moveFolder, sebaiknya menggunakan metode copyFolder terus dilanjut deleteFolder sumbernya. Semoga membantu.

      Delete
    2. terima kasih pak yanto, mungkin saya yang salah menjelaskan ya... soryyy
      pak yanto, saya ingin mendapatkan dan menyimpan path suatu file sebagaimana yang bapak jelaskan di http://access-terapan.blogspot.co.id/2016/03/mengurai-path-sebuah-file.html
      nah, dari materi tersebut, saya harus mengarahkan ke satu file dahulu untuk mendapatkan pathnya...
      untuk mendapatkan file tersebut saya harus masuk ke folder, subfolder
      yang saya inginkan misalnya kita mau mengambil semua file dalam satu folder atau subfolder maka kita cukup memilih folder atau subfolder tersebut tanpa harus memilih file atau semua file, demikian jga jika kita memilih folder maka semua file yang ada di dalamnya termasuk sub folder akan kita dapatkan filenya dan nanti kita ambil pathnya...
      sory pak yanto, kalau merepotkan, atas bantuannya kami ucakan terima kasih

      Delete
    3. Pak Hadi, untuk mengambil semua file dalam satu folder atau subfolder maka kita cukup memilih folder atau subfolder tersebut tanpa harus memilih file atau semua file, langsung gunakan metode copyFolder untuk mengcopy dan deleteFolder untuk memindahkan dan menghapus folder. Nggak perlu pakai path.

      Delete
    4. siap pak yanto, mohon maaf kalau saya salah tempat ya pak, maksudnya bagaimana caranya untuk mendapatkan path suatu file atau files tetapi untuk memilih filenya saya cukup memilih folder atau subfolder lokasi file tersebut tanpa harus memilih nama filenya... soryyy pak yanto kalau salah tempat..

      Delete
    5. Pak Hadi sepertinya mau mengarahkan ke folder path ya? bukan file path... coba baca di sini: http://access-terapan.blogspot.co.id/2016/02/bekerja-dengan-properti-folder-di.html. di situ ada contoh folder path.

      Delete

Post a Comment

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