Skip to main content

Mengelola Folder dengan Menggunakan FileSystemObject

Pada posting terdahulu, kita sudah membuat program yang digunakan untuk mengelola disk drive dari sebuah komputer. Pada posting berikut ini kita akan membuat program yang digunakan untuk mengelola folder. Secara umum proses yang berlaku saat kita mengelola disk drive juga berlaku di folder, yaitu melakukan koneksi untuk mengakses folder yang ingin dibuka, mengecek apakah sebuah folder tersimpan dalam disk drive, serta merinci isi dari sebuah folder.

Mengakses folder tertentu

Dengan menggunakan metode GetFolder pada FileSystemObject, kita dapat mengarahkan Access untuk melakukan koneksi ke folder tertentu dalam sebuah komputer dan mengaksesnya. Koneksi ini diperlukan untuk memastikan bahwa folder yang dimaksud itu benar-benar ada sehingga kita bisa membuka isi folder tersebut. Untuk mengakses dengan menggunakan GetFolder, kita harus menentukan terlebih dahulu nama path dari folder itu. Nama path dapat berupa local path seperti "C:\Docs" atau UNC seperti "\\akunting\akuntansi". Setelah itu dengan menggunakan pernyataan Set, kita memastikan bahwa folder yang dimaksud dapat diakses. Berikut ini adalah kode VBA yang dipergunakan di modul di Access.
  1. Function koneksifolder(strNamaPath As StringAs Boolean  
  2. '------------------------------------------  
  3. ' Fungsi untuk koneksi ke folder  
  4. '------------------------------------------  
  5.   Dim objFSO As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   If Not (objFSO.FolderExists(strNamaPath)) Then  
  8.     Debug.Print "Folder " & strNamaPath & " tidak ada"  
  9.   Else  
  10.     Set objDrive = objFSO.GetFolder(strNamaPath)  
  11.     Debug.Print "Folder " & strNamaPath & " ada"  
  12.   End If  
  13.   koneksifolder = objFSO.FolderExists(strNamaPath)  
  14.   Set objDrives = Nothing  
  15.   Set objFSO = Nothing  
  16. End Function  

Memastikan keberadaan sebuah folder

Sebelum melakukan berbagai perintah ke sebuah folder (seperti meng-copy, memindahkan, mengganti nama, dan menghapus), maka kita harus memastikan bahwa folder itu ada. Folder yang ingin kita ganti nama, misalnya. Saat kita akan mengakses sebuah folder, bila folder itu tidak ada, maka akan muncul pesan kesalahan yang disebut "Path not found". Untuk menghindari munculnya pesan kesalahan seperti itu, kita dapat menggunakan metode FolderExist untuk memeriksa apakah folder yang ingin dibuka itu ada. FolderExist ini bernilai True bila ada, dan False bila tidak ada. Kode VBA selengkapnya di Access adalah sebagai berikut:
  1. Function cekAdaFolder(strNamaPath) As Boolean  
  2. '------------------------------------------  
  3. ' Fungsi untuk mengecek keberadaan folder  
  4. '------------------------------------------  
  5.   Dim objFSO, objFolder  As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   If objFSO.FolderExists(strNamaPath) Then  
  8.     Set objFolder = objFSO.GetFolder(strNamaPath)  
  9.     MsgBox "Folder " & strNamaPath & " ada."  
  10.   Else  
  11.     MsgBox "Folder " & strNamaPath & " tidak ada."  
  12.   End If  
  13.   cekAdaFolder = objFSO.FolderExists(strNamaPath)  
  14.   Set objFolder = Nothing  
  15.   Set objFSO = Nothing  
  16. End Function  
Pada kode VBA di atas, bila ada sebuah folder dengan nama strNamaFolder, akses ke folder itu akan dilakukan dan muncul pesan yang menyatakan bahwa folder itu ada. Sebaliknya, billa folder tidak ada, muncul pesan yang menyatakan bahwa folder dengan nama strNamaFolder tidak ada.

Supaya dapat diaplikasikan ke dalam sistem yang akan kita buat nanti, maka fungsi di atas disederhanakan menjadi seperti berikut ini:
  1. Function adaFolder(strNamaPath) As Boolean  
  2. '------------------------------------------  
  3. ' Fungsi untuk mengecek keberadaan folder  
  4. '------------------------------------------  
  5.   Dim objFSO, objFolder  As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   adaFolder = objFSO.FolderExists(strNamaPath)  
  8.   Set objFSO = Nothing  
  9. End Function  

Menampilkan rincian sebuah folder

Untuk mengelola file yang jumlahnya tidak sedikit, sebuah Operating System pasti akan menempatkan file-filenya dalam kelompok folder. Sebagai contoh OS Windows, yang membagi file-filenya dalam berbagai kelompok folder. Misalnya, file font - dengan ekstensi .otf atau .ttf, akan disimpan dalam folder Fonts. Ada lagi file media, security, network, dan sebagainya. Mereka semua disimpan sesuai dengan objeknya. Demikian pula dengan kita sebagai administrator sistem yang bertugas mengelola sistem yang kita buat.

Folder dibuat sebagai alat untuk membantu administrator mengelola komputer dan membantu user untuk mengelola dokumen yang mereka punyai. Misalnya, pengguna di bagian personalia mungkin menyimpan daftar hidup setiap karyawannya di sebuah folder dengan nama CV. Selain itu file yang berisi hal-hal yang berkaitan dengan gaji disimpan di folder Payroll, dsb.

Di Access, dengan menggunakan FilseSystemObject, kita bisa merinci isi dari sebuah folder. Isi dari sebuah folder bisa berupa file atau subfolder. Nah, pada bagian ini, kita akan menggunakan FileSystemObject untuk membaca subfolder yang ada di sebuah folder. Beriku ini adalah kode VBA pada Access:
  1. Function rincikanFolderItem(strNamaPath As StringOptional ctlListBox As ListBox) As String  
  2. '------------------------------------------  
  3. ' Fungsi untuk merinci subfolder  
  4. '------------------------------------------  
  5.   Dim objFSO As Object, varItemFolder() As Variant  
  6.   Dim n As Integer, strRincikanFolder As String  
  7.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  8.   Set objFolder = objFSO.GetFolder(strNamaPath)  
  9.   Set colSubfolders = objFolder.Subfolders  
  10.   n = 0  
  11.   ReDim Preserve varItemFolder(colSubfolders.count)  
  12.   For Each objSubfolder In colSubfolders  
  13.     varItemFolder(n) = objSubfolder.Path  
  14.     ctlListBox.AddItem Item:=objSubfolder.Path  
  15.     n = n + 1  
  16.   Next  
  17.   strRincikanFolder = Join(varItemFolder, ";")  
  18.   rincikanFolderItem = strRincikanFolder  
  19.   Set objFSO = Nothing  
  20.   Set objFolder = Nothing  
  21. End Function  

Merinci subfolder dalam subforlder

Gambar 1. Rincian untuk folder
Seringkali merinci subfolder dari sebuah folder seperti yang kita lakukan di atas tidaklah cukup. Kita juga ingin mengetahui rincian subfolder yang ada di subfolder yang kita buka. Contohnya seperti Gambar 1 di bawah ini.

Pada Gambar 1, tampak jelas bahwa folder dibuka sampai ke level yang paling rinci di bawah (contohnya seperti folder Class dan Standard). Untuk merinci subfolder semacam itu, maka kita harus membuat semacam folder berkalang (nested folder) dari program rekursi untuk merinci folder. Program rekursi ini merupakan fungsi yang akan mengulang diri-nya sendiri untuk merinci subfolder sampai selesai (tidak ada lagi subfolder lainnya).
Berikut ini adalah kode VBA untuk program rekursi yang ada di Access:
  1. Function rincikanSubFolder(strNamaPath As StringOptional intCount As IntegerOptional ctlListBox As ListBox)  
  2. '------------------------------------------  
  3. ' Fungsi untuk merinci subfolder  
  4. '------------------------------------------  
  5.   Dim objFSO As Object  
  6.   Dim n, maksimumSubFolder As Integer  
  7.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  8.   If Not cekAdaFolder(strNamaPath) Then  
  9.     Cancel = True  
  10.     Exit Function  
  11.   End If  
  12.   Set objFolder = objFSO.GetFolder(strNamaPath)  
  13.   Set colSubfolders = objFolder.Subfolders  
  14.   maksimumSubFolder = 100  
  15.   intCount = intCount + 1  
  16.   For Each objSubfolder In colSubfolders  
  17.     Debug.Print intCount - 1 & " - " & objSubfolder.Path  
  18.     If intCount - 1 > maksimumSubFolder Then  
  19.       Cancel = True  
  20.       Exit Function  
  21.     End If  
  22. ' Bila variabel ctlListBox di atas tidak mempunyai nilai berupa List Box control,  
  23. ' maka satu baris di bawah ini harus dinon-aktifkan  
  24.     ctlListBox.AddItem Item:=objSubfolder.Path  
  25.       
  26.     rincikanSubFolder objSubfolder.Path, intCount, ctlListBox  
  27.   Next  
  28. End Function  
Yang perlu diantisipasi dari program rekursi ini adalah jumlah subfolder yang ingin ditampilkan. Dalam pelaksanaannya, program rekursi memanggil fungsi dirinya sendiri untuk menampilkan subfolder sampai ke yang paling detail. Bila subfolder yang ingin ditampilkan cukup banyak, maka Access bisa mengalami kewalahan sehingga terkesan menggantung. Jadi ada baiknya kita mengatur maksimum jumlah subfolder yang ingin ditampilkan. Pada fungsi di atas, pengaturan maksimum jumlah subfolder yang ingin ditampilkan dilakukan melalui variabel maksimumSubFolder yang nilainya sama dengan 100. Kita dapat mengatur nilai itu sesuai dengan keperluan.

Menampilkan parent folder dari sebuah folder

Selain menampilkan rincian subfolder, kita juga bisa menampilkan parent folder. Parent folder adalah folder yang di dalamnya terdapat folder yang sedang terbuka. Kode VBA yang diperlukan adalah sebagai berikut:
  1. Function tampilkanParentFolder(strNamaPath As StringAs String  
  2. '------------------------------------------  
  3. ' Fungsi untuk menampilkan parent folder  
  4. '------------------------------------------  
  5.   Dim objFSO  As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   If Not adaFolder(strNamaPath) Then  
  8.     Cancel = True  
  9.     Exit Function  
  10.   End If  
  11.   If adaFolder(objFSO.GetParentFolderName(strNamaPath)) Then  
  12.     tampilkanParentFolder = objFSO.GetParentFolderName(strNamaPath)  
  13.   Else  
  14.     tampilkanParentFolder = ""  
  15.   End If  
  16.   Set objFSO = Nothing  
  17. End Function  

Menampilkan nama drive dari sebuah folder

Selain menggunakan GetDrive/DriveExists untuk menampilkan nama drive, kita juga bisa menampilkan drive dari sebuah folder yang sedang terbuka. Gunakan fungsi di bawah ini untuk menampilkan drive dari sebuah folder
  1. Function tampilkanNamaDrive(strNamaPath As StringAs String  
  2. '------------------------------------------  
  3. ' Fungsi untuk menampilkan drive dari sebuah folder  
  4. '------------------------------------------  
  5.   Dim objFSO  As Object  
  6.   Set objFSO = CreateObject("Scripting.FileSystemObject")  
  7.   If Not adaFolder(strNamaPath) Then  
  8.     Cancel = True  
  9.     Exit Function  
  10.   End If  
  11.   tampilkanNamaDrive = objFSO.GetDriveName(strNamaPath)  
  12.   Set objFSO = Nothing  
  13. End Function  

Contoh administrasi folder dengan menggunakan Access VBA

Setelah memahami seluk beluk penanganan folder dengan fungsi-fungsi di atas, sekarang kita bisa membuat sendiri cara penanganan folder di Access dengan menggunakan VBA. Berikut ini adalah langkah-langkah pembuatannya.
  1. Buatlah form dengan menggunakan Blank Form, yaitu dengan mengklik Create >> Forms >> Blank Form.
  2. Pada form yang masih kosong, sisipkan control sebagai berikut:
    1. Satu buah text box dengan properti sebagai berikut:
      1. Name= txtCurPath
      2. Label untuk text box ini, dengan Caption= Nama path
      3. Before Update= [Event Procedure], lihat di bagian kode VBA di bawah.
      4. After Update= [Event Procedure], lihat di bagian kode VBA di bawah.
    2. Satu buah list box dengan properti sebagai berikut:
      1. Name= lstPath
      2. Row Source Type= Value List
      3. Bound Column= 1.
      4. Allow Value List Edits= No
      5. On Dbl Click= [Event Procedure], lihat di bagian kode VBA di bawah.
    3. Dua buah command button dengan properti sebagai berikut:
      Command button 1, properti:
      1. Name= cmdTampilkanParentFolder
      2. ControlTip Text= Parent Folder
      3. On Click= [Event Procedure], lihat di bagian kode VBA di bawah.
      Command button 1, properti:
      1. Name= cmbTampilkanRoot
      2. ControlTip Text= Root folder
      3. On Click= [Event Procedure], lihat di bagian kode VBA di bawah.
    Design view dari form ini tampak seperti gambar di bawah ini.

    Gambar 2. Design View Mengelola Folder
  3. Buatlah sebuah modul (standard module) dengan mengklik Create >> Other >> Module dan simpanlah module itu dengan nama mdlManajemenFolderPath. Setelah itu isikan fungsi yang telah kita bahas di atas ke dalam kode VBA berikut ini:
    1. Option Compare Database  
    2. 'Sisipkan Function adaFolder di sini  
    3.   
    4. 'Sisipkan Function tampilkanParentFolder di sini  
    5.   
    6. 'Sisipkan Function tampilkanNamaDrive di sini  
    7.   
    8. 'Sisipkan Function rincikanFolderItem di sini  
    9.   
    10. 'Sisipkan Function rincikanSubFolder di sini  
  4. isikan kode VBA di bawah ini di class module form:
    1. Option Compare Database  
    2.   
    3. Private Sub cmbTampilkanRoot_Click()  
    4.   Me.txtCurPath = tampilkanNamaDrive(Me.txtCurPath) & "\"  
    5.   rincikanFolderItem Me.txtCurPath, Me.lstPath  
    6.   Me.txtCurPath.SetFocus  
    7.   Me.cmdTampilkanParentFolder.Enabled = False  
    8. End Sub  
    9.   
    10. Private Sub cmdTampilkanParentFolder_Click()  
    11.   Me.txtCurPath = tampilkanParentFolder([txtCurPath])  
    12.   Me.txtCurPath.ControlTipText = Me.txtCurPath  
    13.   Me.txtCurPath.Requery  
    14.   Me.lstPath.RowSource = ""  
    15.   If Me.txtCurPath = tampilkanNamaDrive(Me.txtCurPath) & "\" Then  
    16.     rincikanFolderItem Me.txtCurPath, Me.lstPath  
    17.     Me.txtCurPath.SetFocus  
    18.     Me.cmdTampilkanParentFolder.Enabled = False  
    19.   Else  
    20.     Me.lstPath.AddItem Item:="."  
    21.     Me.lstPath.AddItem Item:=".."  
    22.     rincikanSubFolder Me.txtCurPath, 1, Me.lstPath  
    23.     Me.cmdTampilkanParentFolder.Enabled = True  
    24.   End If  
    25. End Sub  
    26.   
    27. Private Sub Form_Open(Cancel As Integer)  
    28.   Me.txtCurPath = CurDir  
    29.   txtCurPath_AfterUpdate  
    30. End Sub  
    31.   
    32. Private Sub lstPath_DblClick(Cancel As Integer)  
    33.   If Me.lstPath = "." Then  
    34.     cmbTampilkanRoot_Click  
    35.     Exit Sub  
    36.   End If  
    37.   If Me.lstPath = ".." Then  
    38.     cmdTampilkanParentFolder_Click  
    39.     Exit Sub  
    40.   End If  
    41.   Me.txtCurPath = Me.lstPath  
    42.   txtCurPath_AfterUpdate  
    43. End Sub  
    44. Private Sub txtCurPath_BeforeUpdate(Cancel As Integer)  
    45.   If Me.txtCurPath = ".." Or Me.txtCurPath = "." Then  
    46.     MsgBox "Anda dapat mengklik ganda tanda .. atau . dari daftar yang tersedia di bawah ini"  
    47.     SendKeys "{ESC}"  
    48.     Cancel = True  
    49.     Exit Sub  
    50.   End If  
    51. End Sub  
    52. Private Sub txtCurPath_AfterUpdate()  
    53.   If adaFolder(Me.txtCurPath) Then  
    54.     Me.txtCurPath.ControlTipText = Me.txtCurPath  
    55.     Me.txtCurPath.Requery  
    56.   Else  
    57.     MsgBox "Folder " & Me.txtCurPath & " tidak ada."  
    58.     Cancel = True  
    59.     Exit Sub  
    60.   End If  
    61.   Me.lstPath.RowSource = ""  
    62.     Me.lstPath.AddItem Item:="."  
    63.   Me.lstPath.AddItem Item:=".."  
    64.   If Me.txtCurPath = tampilkanNamaDrive(Me.txtCurPath) & "\" Then  
    65.     rincikanFolderItem Me.txtCurPath, Me.lstPath  
    66.     Me.cmdTampilkanParentFolder.Enabled = False  
    67.   Else  
    68.     rincikanSubFolder Me.txtCurPath, 1, Me.lstPath  
    69.     Me.cmdTampilkanParentFolder.Enabled = True  
    70.   End If  
    71.   Me.txtCurPath.ControlTipText = Me.txtCurPath  
    72.   Me.txtCurPath.Requery  
    73. End Sub  
  5. Tampilan Form View dari form untuk mengelola folder akan tampak seperti gambar di bawah ini.

    Gambar 3. Form View Mengelola Folder

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Fungsi Untuk Membuka Database di Access VBA

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access