在VBA中删除文件

使用VBA,我该如何:

  1. testing一个文件是否存在,如果是的话,
  2. 删除它?

1.) 在这里检查。 基本上这样做:

Function FileExists(ByVal FileToTest As String) As Boolean FileExists = (Dir(FileToTest) <> "") End Function 

我会把它留给你来弄清楚各种error handling需要,但这些都是我会考虑的error handling的事情之一:

  • 检查传递的空string。
  • 检查文件名/path中包含非法字符的string

2.)如何删除文件。 看这个 基本上使用Kill命令,但是你需要考虑到文件是只读的可能性。 这是你的一个function:

 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 

再一次,我会把error handling留给你,这些都是我所考虑的事情:

  • 对于目录和文件,这种行为应该是不同的吗? 用户是否必须明确地指出他们想要删除一个目录?

  • 你想让代码自动重置只读属性,还是应该给用户一些指示,只读属性设置?


编辑:标记这个答案作为社区wiki,所以任何人都可以修改它,如果需要的话。

另一种方法来编码布雷奇茨基的答案,我完全同意这个答案

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

同样的效果,但更less(呃,没有)variables声明。

FileSystemObject是一个非常有用的工具,非常值得友好。 除此之外,对于文本文件的编写,实际上有时可能比传统的替代方法更快,这可能会让一些人感到惊讶。 (至less在我的经验,YMMV)。

我可能会因为这个而火冒三丈,但是如果你只是要删除它,testing的存在点又是什么? 我的一个主要的宠物小偷是一个应用程序抛出一个类似“无法删除文件,它不存在的错误对话框!

 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. 

如果文件不存在,任务完成!

以下可用于testing文件的存在,然后删除它。

 Dim aFile As String aFile = "c:\file_to_delete.txt" If Len(Dir$(aFile)) > 0 Then Kill aFile End If 

在VB中它通常是Dir来查找文件的目录。 如果不是空白的,那么它就存在,然后使用Kill来删除文件。

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

设置对Scripting.Runtime库的引用 ,然后使用FileSystemObject:

 Dim fso as New FileSystemObject, aFile as File if (fso.FileExists("PathToFile")) then aFile = fso.GetFile("PathToFile") aFile.Delete End if 

这里有一个提示:你是重新使用文件名,还是打算做一些需要立即删除的东西?

没有?

您可以让VBA从命令提示符asynchronous使用VBA.Shell启动命令DEL“C:\ TEMP \ scratchpad.txt”/ F:

Shell“DEL”&chr(34)&strPath&chr(34)&“/ F”,vbHide

请注意文件名周围的双引号(ASCII字符34):我假设你有一个networkingpath,或者一个包含空格的长文件名。

如果这是一个大文件,或者它的networking连接速度很慢,那么“即忘即忘”就是要走的路。 当然,你永远不会看到这是否有效, 但是您立即恢复您的VBA,有时这比等待networking好。

您可以设置对Scripting.Runtime库的引用,然后使用FileSystemObject。 它有一个DeleteFile方法和一个FileExists方法。

请参阅这里的MSDN文章。