Menggunakan VBA, bagaimana saya bisa:
- menguji apakah sebuah file ada, dan jika demikian,
- Hapus?
Menggunakan VBA, bagaimana saya bisa:
1.) Periksa di sini . Pada dasarnya lakukan ini:
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
Saya akan menyerahkan kepada Anda untuk mencari tahu berbagai penanganan kesalahan yang diperlukan, tetapi ini adalah di antara hal-hal penanganan kesalahan yang akan saya pertimbangkan:
2.) Cara Menghapus File. Lihat ini. Pada dasarnya gunakan perintah Bunuh tetapi Anda harus mengizinkan kemungkinan file menjadi hanya-baca. Inilah fungsinya untuk Anda:
Sub DeleteFile(ByVal FileToDelete As String)
If FileExists(FileToDelete) Then 'See above
' First remove readonly attribute, if set
SetAttr FileToDelete, vbNormal
' Then delete the file
Kill FileToDelete
End If
End Sub
Sekali lagi, saya akan menyerahkan penanganan kesalahan kepada Anda dan sekali lagi ini adalah hal-hal yang akan saya pertimbangkan:
Haruskah ini berperilaku berbeda untuk direktori vs. file? Haruskah pengguna harus secara eksplisit menunjukkan bahwa mereka ingin menghapus direktori?
Apakah Anda ingin kode menyetel ulang atribut hanya-baca secara otomatis atau haruskah pengguna diberi semacam indikasi bahwa atribut hanya-baca disetel?
EDIT: Menandai jawaban ini sebagai wiki komunitas sehingga siapa pun dapat memodifikasinya jika perlu.
Cara alternatif untuk mengkodekan jawaban Brettski, yang saya setujui sepenuhnya, mungkin saja
Efek yang sama tetapi lebih sedikit (yah, tidak ada sama sekali) deklarasi variabel.
FileSystemObject adalah alat yang sangat berguna dan layak digunakan. Terlepas dari apa pun, untuk penulisan file teks terkadang bisa lebih cepat daripada alternatif lama, yang mungkin mengejutkan beberapa orang. (Setidaknya dalam pengalaman saya, YMMV).
sumber
Saya mungkin akan dikecam karena ini, tetapi apa gunanya menguji keberadaan jika Anda hanya akan menghapusnya? Salah satu kekesalan utama saya adalah aplikasi yang menampilkan dialog kesalahan dengan sesuatu seperti "Tidak dapat menghapus file, tidak ada!"
Jika file tidak ada sejak awal, misi selesai!
sumber
ActiveWorkbook.SaveCopyAs
tidak dapat menimpa, jadi Anda harus menghapus file yang sudah ada dengan nama file yang sama terlebih dahulu.On Error Resume Next
, atau begitulah saya telah diberitahu: D Tentu saja, itu nasihat yang konyol, dan jawaban Anda benar.Len(dir(...))
ini TIDAK HANYA untuk memeriksa keberadaan. Hal ini juga memeriksa apakah file tersebut HIDDEN karena file yang tersembunyi akan mengembalikan string kosong bahkan jika itu ada (dan Anda tidak akan dapat menghapusnya):Dir(hiddenFile) = ""
. Oleh karena itu, bagian tersebut denganSetAttr FileToDelete, vbNormal
fasih menangani ini untuk Anda.Berikut ini dapat digunakan untuk menguji keberadaan file, dan kemudian menghapusnya.
sumber
Len()
(danLenB()
, yang bahkan lebih cepat) lebih cepat daripada perbandingan string adalah karena dalam memori, string VB didahului oleh panjangnya. Len / LenB hanya menarik panjang dari lokasi memori itu, mereka tidak perlu mengulang melalui string untuk mengetahui panjangnya. Di sisi lain, menggunakan perbandingan string memiliki lebih banyak pekerjaan yang harus dilakukan. Selain itu, hindari penggunaan""
di VB karena selalu mengalokasikan string baru. GunakanvbNullString
sebagai gantinya karena ini adalah konstanta dan tidak menggunakan lebih banyak memori.Di VB biasanya
Dir
untuk menemukan direktori file. Jika tidak kosong maka itu ada dan kemudian gunakanKill
untuk menyingkirkan file tersebut.sumber
setel referensi ke pustaka Scripting.Runtime dan kemudian gunakan FileSystemObject:
sumber
Berikut tipnya: apakah Anda menggunakan kembali nama file, atau berencana melakukan sesuatu yang memerlukan penghapusan segera?
Tidak?
Anda bisa mendapatkan VBA untuk mengaktifkan perintah DEL "C: \ TEMP \ scratchpad.txt" / F dari command prompt secara asinkron menggunakan VBA.Shell:
Shell "DEL" & chr (34) & strPath & chr (34) & "/ F", vbHide
Perhatikan tanda kutip ganda (karakter ASCII 34) di sekitar nama file: Saya berasumsi bahwa Anda memiliki jalur jaringan, atau nama file panjang yang berisi spasi.
Jika itu file besar, atau itu pada koneksi jaringan yang lambat, api-dan-lupakan adalah cara yang tepat. Tentu saja, Anda tidak pernah bisa melihat apakah ini berhasil atau tidak; tetapi Anda segera melanjutkan VBA Anda, dan ada kalanya ini lebih baik daripada menunggu jaringan.
sumber
Anda dapat mengatur referensi ke perpustakaan Scripting.Runtime dan kemudian menggunakan FileSystemObject. Ini memiliki metode DeleteFile dan metode FileExists.
Lihat artikel MSDN di sini .
sumber