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:
Set objFSO = CreateObject("Scripting.FileSystemObject")
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\"
Set objFSO = CreateObject("Scripting.FileSystemObject")
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:
    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:
    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:
    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:
    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:
    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:
Function pindahFile(strSumber As String, strTarget As String, strKataKunci As String)
'------------------------------------------
' Fungsi untuk memindahkan file dengan menggunakan metode MoveFile
' Jangan dipergunakan sembarangan,
' karena file yang sudah dipindahkan mungkin akan menimpa
' file dengan nama yang sama sehingga tidak bisa di-restore.
' ?pindahFile("D:\User\UserA\","D:\UserB", "menu")

'------------------------------------------
  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 dipindahkan
' 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
          Debug.Print objFile.Path & " dipindah ke " & strTarget
          objFSO.MoveFile objFile.Path, 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 dipindahkan
' 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
          Debug.Print objFile.Path & " dipindah ke " & strTarget
          objFSO.MoveFile objFile.Path, strTarget
        End If
      End If
    Next objFile
    pindahFile objSubFolder.Path, strTarget, strKataKunci
  Next objSubFolder
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
Function pindahFileWildCard(strSumber As String, strTarget As String, strKataKunci As String)
'------------------------------------------
' Fungsi untuk memindahkan file dengan menggunakan metode MoveFile
' Jangan dipergunakan sembarangan,
' karena file yang sudah dipindahkan mungkin akan menimpa
' file dengan nama yang sama sehingga 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 & " dipindah ke " & strTarget
    objFSO.MoveFile strSumber & "\" & strKataKunci, strTarget
  End If
  Set colSubfolders = objFolder.SubFolders
  For Each objSubFolder In colSubfolders
    pindahFileWildCard objSubFolder.Path, strTarget, strKataKunci
  Next objSubFolder
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:
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

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access