Jawaban:
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
With New FileSystemObject
If .FileExists(yourFilePath) Then
.DeleteFile yourFilepath
End If
End With
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).
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!"
On Error Resume Next
aFile = "c:\file_to_delete.txt"
Kill aFile
On Error Goto 0
return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.
Jika file tidak ada sejak awal, misi selesai!
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 dengan SetAttr FileToDelete, vbNormal
fasih menangani ini untuk Anda.
Berikut ini dapat digunakan untuk menguji keberadaan file, dan kemudian menghapusnya.
Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
Kill aFile
End If
Len()
(dan LenB()
, 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. Gunakan vbNullString
sebagai gantinya karena ini adalah konstanta dan tidak menggunakan lebih banyak memori.
setel referensi ke pustaka Scripting.Runtime dan kemudian gunakan FileSystemObject:
Dim fso as New FileSystemObject, aFile as File
if (fso.FileExists("PathToFile")) then
aFile = fso.GetFile("PathToFile")
aFile.Delete
End if
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.
Anda dapat mengatur referensi ke perpustakaan Scripting.Runtime dan kemudian menggunakan FileSystemObject. Ini memiliki metode DeleteFile dan metode FileExists.
Lihat artikel MSDN di sini .