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:
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.
Pada Immediate Window, semua file yang berekstensi *.txt dalam folder/subfolder "D:\UserB" dipindahkan ke target "D:\User\UserA\".
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:
- Sumber file yang berisi nama path lengkap dari file yang ingin dipindahkan.
- Target lokasi yang berupa nama path untuk memindahkan file. Target lokasi ini diakhiri dengan tanda backslash ("\")
Set objFSO = CreateObject("Scripting.FileSystemObject") objFSO.MoveFile Nama sumber file, Nama targetBerikut 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:- Menggunakan wildcard
- Menggunakan statement for each ... next
- 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:- 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\"
- 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\"
- 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\"
- 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\"
- 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 FunctionFungsi 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 iniFunction 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 FunctionFungsi 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:- 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.
- 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.
- Meng-copy file yang ingin dipindahkan dari file sumber ke target dengan menggunakan metode CopyFile.
- 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.
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
ReplyDeleteKalau 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.
Deleteterima kasih pak yanto, mungkin saya yang salah menjelaskan ya... soryyy
Deletepak 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
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.
Deletesiap 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..
DeletePak 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