it-swarm-id.com

Menghapus file dalam VBA

Menggunakan VBA, bagaimana saya bisa:

  1. menguji apakah ada file, dan jika demikian,
  2. hapus?
113
inglesp

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 salah satu dari beberapa penanganan kesalahan yang akan saya pertimbangkan:

  • Periksa string kosong yang diteruskan.
  • Periksa string yang mengandung karakter ilegal di nama file/jalur

2.) Cara Menghapus File. Lihatlah ini. Pada dasarnya gunakan perintah Kill tetapi Anda harus mengizinkan kemungkinan file hanya-baca. Inilah fungsi 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 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 untuk secara otomatis mereset atribut read-only atau haruskah pengguna diberi semacam indikasi bahwa atribut read-only diatur?


EDIT: Menandai jawaban ini sebagai wiki komunitas sehingga siapa pun dapat memodifikasinya jika perlu.

157
Onorio Catenacci

Cara alternatif untuk kode jawaban Brettski, dengan yang saya setuju sepenuhnya, mungkin

With New FileSystemObject
    If .FileExists(yourFilePath) Then
        .DeleteFile yourFilepath
    End If
End With

Efek yang sama tetapi lebih sedikit (baik, tidak ada sama sekali) deklarasi variabel.

FileSystemObject adalah alat yang sangat berguna dan layak untuk diajak berteman. Terlepas dari hal lain, untuk penulisan file teks terkadang bisa lebih cepat daripada alternatif lama, yang mungkin mengejutkan beberapa orang. (Setidaknya dalam pengalaman saya, YMMV).

50
Mike Woodhouse

Saya mungkin akan dinyalakan karena ini, tapi apa gunanya menguji keberadaan jika Anda hanya akan menghapusnya? Salah satu hewan peliharaan utama saya adalah aplikasi yang melempar dialog kesalahan dengan sesuatu seperti "Tidak dapat menghapus file, itu 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 di tempat pertama, misi selesai!

13
JohnFx

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 
10
Rich Adams

Dalam VB biasanya Dir untuk menemukan direktori file. Jika tidak kosong maka ada dan gunakan Kill untuk menyingkirkan file.

test = Dir(Filename)
If Not test = "" Then
    Kill (Filename)
End If
6
Leo Moore

set 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
4
Brettski

Berikut tip: apakah Anda menggunakan kembali nama file, atau berencana untuk melakukan sesuatu yang memerlukan penghapusan segera?

Tidak?

Anda bisa mendapatkan VBA untuk menjalankan perintah DEL "C:\TEMP\scratchpad.txt"/F dari perintah Prompt asynchronously menggunakan VBA.Shell:

Shell "DEL" & chr (34) & strPath & chr (34) & "/ F", vbSembunyikan

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 ini file besar, atau koneksi jaringan lambat, gunakan api-dan-lupakan saja. 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.

3
Nigel Heffernan

Anda dapat mengatur referensi ke pustaka Scripting.Runtime dan kemudian menggunakan FileSystemObject. Ini memiliki metode DeleteFile dan metode FileExists.

Lihat artikel MSDN di sini .

2
Darrel Miller