在VBA中删除文件

时间:2020-03-05 18:54:46  来源:igfitidea点击:

使用VBA,我如何:

  • 测试文件是否存在,如果存在,
  • 删除它?

解决方案

回答

在VB中,通常使用" Dir"查找文件目录。如果不是空白,则表示存在,然后使用"杀死"来删除文件。

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

回答

以下内容可用于测试文件是否存在,然后将其删除。

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

回答

1.)在这里检查。基本上做到这一点:

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

我将留给我们找出所需的各种错误处理,但这是我要考虑的错误处理内容之一:

  • 检查是否传递了空字符串。
  • 检查文件名/路径中包含非法字符的字符串

2.)如何删除文件。看这个。基本上使用Kill命令,但是我们需要考虑将文件设为只读的可能性。这是为我们提供的功能:

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

同样,我将把错误处理留给我们,这些也是我要考虑的事情:

  • 目录和文件的行为是否应该有所不同?用户是否应该必须明确表示他们要删除目录?
  • 我们是否要让代码自动重置只读属性,还是应该向用户提供某种指示,说明已设置了只读属性?

编辑:将此答案标记为社区Wiki,以便任何人可以根据需要进行修改。

回答

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

请参阅此处的MSDN文章。

回答

我可能会为此感到生气,但是如果我们打算删除它,那么测试存在性的重点是什么?我的主要烦恼之一是一个引发错误对话框的应用程序,显示诸如"无法删除文件,它不存在!"之类的内容。

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.

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

回答

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

Dim fso as New FileSystemObject, aFile as File

if (fso.FileExists("PathToFile")) then
    aFile = fso.GetFile("PathToFile")
    aFile.Delete
End if

回答

我否则完全同意布雷特斯基的答案的另一种编码方式可能是

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

效果相同,但变量声明更少(很好,一点都没有)。

FileSystemObject是一个非常有用的工具,非常值得与之友好。除了任何其他内容,对于文本文件编写,实际上有时它可能比传统的替代方法要快,这可能会让一些人感到惊讶。 (至少以我的经验,YMMV)。