Skip to main content

Melakukan Proses Editing Folder dengan Menggunakan Access VBA

Bagi kita yang sering menggunakan Windows Explorer tentu sudah tidak asing lagi dengan perintah untuk meng-copy dan paste, memindahkan, menghapus, atau bahkan mengganti nama sebuah folder. Mungkin, tidak banyak orang yang tahu bahwa MS Access juga mempunyai kemampuan seperti itu. Pada posting kali ini, kita akan belajar bagaimana melakukan pengeditan seperti yang kita lakukan dengan Windows Explorer, terutama yang berkaitan dengan editing folder.

Meng-copy Folder

Salah satu bagian penting dalam mengelola sistem adalah mengkopi folder dan isinya. Seringkali kita mengkopi folder untuk menyimpannya sebagai back up dan berjaga-jaga jika terjadi masalah dengan data yang tersimpan dalam folder itu. Membuat back up untuk berjaga-jaga bisa dilakukan di folder lain, di hard disk drive yang lain, atau bahkan di dalam sebuah CD/DVD. Selain untuk melakukan back-up data, kita juga meng-copy folder untuk didistribusikan ke komputer yang lain yang mungkin membutuhkan.

Dengan VBA di Access, kita bisa menggunakan metode CopyFolder untuk mengkopi sebuah folder beserta isinya ke tempat lain, sama seperti yang kita lakukan melalui Windows Explorer. Untuk menjalankannya, metode CopyFolder memerlukan dua parameter yang harus ada:
  1. Folder sumber yang akan di-copy. Folder sumber bisa berupa path lokal yang ada dalam komputer (misalnya di D:\TesFolder) atau UNC (misalnya \\Server1\TesFolder).
  2. Folder target yang akan digunakan untuk menaruh hasil copy-an. Folder target juga bisa berupa path lokal maupun UNC. Jika folder target tidak ada, maka folder itu akan dibuat secara otomatis.
Selain itu, metode CopyFolder dapat menggunakan paramater ketiga yang sifatnya optional, yaitu Overwrite, nilanya bisa True atau False. Bila parameter Overwrite bernilai True, yang merupakan default, maka CopyFolder akan menimpa folder yang ada di folder target. Sebagai contoh, bila folder dengan nama TesFolder di-copy dan paste ke folder target dengan nama yang sama (=TesFolder) maka, folder target TesFolder yang sudah ada akan ditimpa dan diganti dengan folder TesFolder yang berasal dari folder sumber. Yang menarik dari parameter Overwrite ini, bila dalam folder target sudah ada subfolder atau file, maka subfolder atau file itu tidak akan hilang tertimpa oleh folder target. Subfolder atau file dalam folder target tidak dihapus oleh folder target yag baru. (lihat contoh di gambar 2a-2c di bawah).

Bila Overwrite bernilai False, maka CopyFolder tidak akan menimpa folder yang ada di folder target. Namun demikian, saat akan mem-paste folder ke target, pesan kesalahan eksekusi (run-time error) akan muncul. Bila run-time error ini muncul, maka CopyFolder akan berhenti. Contohnya seperti ini: Ada 10 folder sumber yang ingin di-copy ke folder target. Folder sumber yang ketiga, sebut saja Mawar, ternyata ada di folder target. Nah, saat folder kedua sudah selesai di-paste ke folder target, dan hendak mem-paste folder Mawar, pesan run-time error akan muncul, dan proses paste berhenti. Tujuh folder yang hendak di-paste juga dibatalkan. Dengan demikian, hanya ada dua folder pertama saja yang berhasil di-paste.

Berikut ini adalah contoh penggunaan metode CopyFile dengan menggunakan FileSystemObject di Access VBA.
Function kopiFolder(strSumber As String, strTarget As String)
  Dim objFSO, objFolder As Object
   Set objFSO = CreateObject("Scripting.FileSystemObject")
  If Not objFSO.FolderExists(strSumber) Then
   MsgBox "Folder " & strSumber & " tidak ada."
   Exit Function
  End If
  If objFSO.FolderExists(strTarget) Then
    If MsgBox("Folder " & strTarget & " sudah ada. Apakah anda ingin menggantinya dengan yang baru?", vbYesNo) = vbYes Then
      objFSO.copyFolder strSumber, strTarget
      Debug.Print "Folder dikopi ke:" & strTarget
    Else
      Exit Function
    End If
  Else
    objFSO.copyFolder strSumber, strTarget, True
    Debug.Print "Folder dikopi ke:" & strTarget
End If Set objFSO = Nothing End Function
Fungsi kopiFolder di atas akan meng-copy folder dari strSumber ke strTarget, seperti tampak pada gamber 1.

Gambar 1. Bagian A adalah VBA Editor dan Immediate WIndows, sedangkan bagian B adalah Windows Explorer


Fungsi kopiFolder("D:\TesFolder","D:\TesFolder1") di gambar itu akan meng-copy folder sumber yang bernama TesFolder di directory D:\ ke folder target yang bernama TesFolder1 di directory yang sama. Bila folder strTarget sudah ada, maka kita bisa menimpanya dengan folder baru yang ingin di-copy atau membatalkan metode CopyFolder ini.

Gambar 2a. Posisi awal folder D:\TesFolder1 sebelum ada proses CopyFolder
Gambar 2b. Isi folder D:\TesFolder

Gambar 2c. Posisi akhir folder D:\TesFolder1 setelah ada proses CopyFolder dari D:\TesFolder



Contoh lain, bila di folder target D:\TestFolder1 sudah berisi subfolder atau file seperti tampak pada gambar 2a, sedangkan folder sumber D:\TesFolder sudah berisi file seperti tampak pada gambar 2b, maka dengan menggunakan fungsi kopiFolder("D:\TesFolder","D:\TesFolder1") di atas, isi dari folder target tidak akan hilang atau dihapus. Sebaliknya, isi folder sumber akan ditambahkan ke folder target. Hasilnya akan tampak seperti gambar 2c. Pada gambar 2c itu terdapat dua buah file dari folder sumber D:\TesFolder yang di-copy ke folder target D:\TesFolder1.

Memindahkan Sebuah Folder dan Seluruh Isinya

Sesaat setelah meng-copy sebuah folder dari sebuah sumber ke target, maka kita mempunyai duplikat di folder target yang isinya sama persis dengan folder sumber. Itulah gunanya meng-copy. Di lain waktu, kita ingin memindahkan sebuah folder dari satu tempat ke ke tempat lain. Misalnya, memindahkan sebuah folder dari hard disk C ke hard disk D, dari hard disk D ke CD atau mobile disk yang lain. Kita juga bisa memindahkan folder dari hard disk ke komputer lain dalam sebuah jaringan.

Kita memindahkan folder ke tempat lain biasanya untuk mengurangi jumlah memori yang terpakai dalam sebuah media penyimpanan. Sebagai misal, hard disk C yang telah 90% penuh mungin ingin dikurangi file atau folder yang ada di dalamnya, sehingga memori hard disk itu menjadi lebih longgar dan dapat digunakan untuk menyimpan file/folder yang lain, yang mungkin lebih berguna. Untuk memindahkan sebuah folder, kita dapat menggunakan metode MoveFolder.

Metode MoveFolder mempunyai dua parameter:
  1. Folder sumber yang akan dipindahkan. Folder sumber bisa berupa path lokal yang ada dalam komputer (misalnya di D:\TesFolder) atau UNC (misalnya \\Server1\TesFolder).
  2. Folder target yang akan digunakan untuk menyimpan folder hasil pindahan) Folder target juga bisa berupa path lokal maupun UNC.
Jika nama folder target belum ada, maka folder sumber akan dipindahkan ke folder target. Jika nama folder target sudah ada, maka pemindahan tidak bisa dilakukan alias gagal. MoveFolder tidak bisa memindahkan sebuah folder sumber dengan menimpa nama folder target yang sudah ada. Bila ingin menggunakan nama folder target yang sudah ada, maka folder target itu harus dihapus terlebih dahulu dengan metode DeleteFolder. Setelah dihapus, folder sumber bisa dipindahkan ke folder target.
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.MoveFolder "C:\Sumber" , "C:\Target"
Pada contoh kode di atas, MoveFolder digunakan untuk memindahkan folder C:\Sumber ke C:\Target.
Sayangnya, MoveFolder mempunyai satu kelemahan. Bila ada gangguan saat proses pemindahan folder dilakukan, maka folder sumber dan target mungkin akan mengalami kerusakan. Bila terjadi kerusakan, maka folder yang dipindahkan tidak dapat diperbaiki atau di-restore ke posisi semula saat MoveFolder belum dijalankan. Oleh karena itu, jalan terbaik untuk memindahkan folder dari satu tempat ke tempat lain adalah dengan menggunakan dua metode. Dua metode itu adalah CopyFolder dan DeleteFolder. CopyFolder dilakukan untuk membuat duplikat dari folder sumber yang ingin dipindahkan ke folder target. Setelah CopyFolder selesai dijalankan, maka DeleteFolder digunakan untuk menghapus folder sumber, sehingga hanya tersisa folder target. Dengan dua metode seperti ini, maka folder yang ingin dipindahkan tidak akan mengalami kerusakan. Jika terjadi sesuatu saat proses pemindahan terjadi, maka folder sumber masih ada dan berfungsi seperti semula.
Berikut ini adalah contoh fungsi memindahkan folder yang dibuat dengan Access VBA menggunakan FileSystemObject:
Function pindahkanFolder(strSumber As String, strTarget As String)
  Dim objFSO, objFolder As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  If Not objFSO.FolderExists(strSumber) Then
   MsgBox "Folder " & strSumber & " tidak ada."
   Exit Function
  End If
  If objFSO.FolderExists(strTarget) Then
   MsgBox "Folder " & strTarget & " sudah ada."
   Exit Function
  End If
  objFSO.MoveFolder strSumber, strTarget
  MsgBox "Folder " & strSumber & " sudah dipindahkan."
  Set objFSO = Nothing
End Function

Mengganti Nama Folder

FileSystemObject tidak mempunyai metode yang khusus digunakan untuk mengganti nama sebuah folder. Untuk mengganti nama sebuah folder, kita bisa menggunakan metode MoveFolder di atas. Misalkan nama folder D:\TestFolder ingin diganti menjadi D:\TestFolder1, maka jalankan fungsi pindahkanFolder di atas seperti di bawah ini:
pindahkanFolder("D:\TestFolder" , "D:\TestFolder1")

Menghapus Folder

Pada situasi tertentu, sebuah sistem akan menyimpan temporary file yang berada dalam sebuah folder. Temporary file ini digunakan untuk memudahkan dan mempercepat sebuah program. Saat program itu selesai dijalankan atau ditutup, maka temporary file juga akan dihapus. Bila jumlah temporary file relatif banyak, maka akan lebih mudah bagi programmer untuk membuat semacam folder yang sifatnya juga temporer dan digunakan untuk menyimpan temporary file itu. Bila program tidak dibutuhkan lagi, maka folder temporer itu juga bisa dihapus. Dengan demikian kita bisa menghemat media penyimpanan.

Pada situasi lain, kita mungkin ingin menghapus sebuah folder yang sudah tidak terpakai lagi, entah karena tidak ada lagi orang memperbaharui folder itu, ingin dipindahkan ke media penyimpanan yang lain (untuk tujuan back-up), atau folder itu menggantung sehingga tidak berguna.

Untuk menghapus sebuah folder, kita bisa menggunakan metode DeleteFolder yang disediakan oleh Access VBA melalui FileSystemObject. Metode DeleteFolder menghapus sebuah folder beserta isinya. Parameter yang diperlukan dalam metode DeleteFolder ini berupa nama path dari folder yang akan dihapus. Contoh berikut ini akan menghapus folder C:\Folder1 beserta seluruh isi dalam folder itu:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder("C:\Folder1")
Metode DeleteFolder menghapus semua folder dan isinya dengan segera, tanpa meminta konfirmasi. Selain itu, metode ini juga tidak akan menaruh folder yang dihapus ke dalam Recylce Bin. Oleh karena itu seorang admin tidak boleh sembarangan menghapus sebuah folder, kecuali folder itu sudah tidak diperlukan.

Kita dapat menggunakan karakter wildcard berupa tanda asteriks (*) untuk menghapus beberapa folder sekaligus. Sebagai misal, untuk menghapus semua folder yang berawalan dengan huruf A pada C:\Folder1, maka kita bisa menggunakan kode berikut ini:
objFSO.DeleteFolder("C:\Folder1\A*")
Bila ingin menghapus subfolder yang diawali dengan huruf "Su", maka gunakan kode berikut ini:
objFSO.DeleteFolder("C:\Folder1\Su*")
Karakter wildcard ini hanya bisa diikutsertakan di bagian akhir dari parameter nama path. Kita tidak bisa menjalankan metode DeleteFolder yang mempunyai karakter wildcard di tengah parameter nama path seperti berikut ini:
objFSO.DeleteFolder("C:\*\Subfolder1")
Bila metode di atas dijalankan, maka akan muncul kesalahan "Path not found".
Berikut ini adalah contoh kode VBA di Access yang digunakan untuk menghapus sebuah folder melalui FileSystemObject:
Function hapusFolder(strFolder As String)
  Dim objFSO, objFolder As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  If Not objFSO.FolderExists(strFolder) Then
   MsgBox "Folder " & strFolder & " tidak ada."
   Exit Function
  End If
  If MsgBox("Bila " & strFolder & " dihapus, folder ini tidak bisa di-restore. Konfirm hapus folder ini?", vbYesNo) = vbYes Then
    objFSO.DeleteFolder strFolder
    MsgBox "Folder " & strFolder & " sudah dihapus."
  End If
  Set objFSO = Nothing
End Function

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access