当前位置:  开发笔记 > 编程语言 > 正文

在VBA中删除文件

如何解决《在VBA中删除文件》经验,为你挑选了6个好方法。

使用VBA,我该怎么做:

    测试文件是否存在,如果存在,

    删除它?

Onorio Caten.. 159

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

再次,我将把错误处理留给你,这些是我要考虑的事情:

对于目录与文件,这种行为应该不同吗?用户是否必须明确表示要删除目录?

您是否希望代码自动重置只读属性,或者是否应该向用户提供某种指示,即只设置了只读属性?


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



1> Onorio Caten..:

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

再次,我将把错误处理留给你,这些是我要考虑的事情:

对于目录与文件,这种行为应该不同吗?用户是否必须明确表示要删除目录?

您是否希望代码自动重置只读属性,或者是否应该向用户提供某种指示,即只设置了只读属性?


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


你不能有两个文件与目录相同的名称.

2> Mike Woodhou..:

对Brettski的答案进行编码的另一种方法可能是完全同意的

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

相同的效果但更少(好吧,根本没有)变量声明.

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


在不声明文件脚本对象的情况下使用此语法,必须为Microsoft Scripting Runtime添加引用,否则:Dim fs As New Scripting.FileSystemObject
您还需要引用脚本库.请看这里:http://stackoverflow.com/questions/3233203/how-do-i-use-filesystemobject-in-vba

3> JohnFx..:

我可能会因此而受到抨击,但如果您要删除它,那么测试存在的重点是什么?我的一个主要的烦恼是一个应用程序抛出一个错误对话框,如"无法删除文件,它不存在!"

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.

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


你提出了一个好点,但是,像大多数事情一样,我认为它将取决于上下文,有时简单地使用"文件存在"功能除了删除之外也很方便.
+1:可能在删除文件之前要求应用程序的用户:例如,使用`ActiveWorkbook.SaveCopyAs`无法覆盖,因此您首先必须删除具有相同文件名的现有文件.

4> Rich Adams..:

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

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


`Len()`(和`LenB()`,甚至更快)比字符串比较更快的原因是在内存中,VB字符串前面是它们的长度.Len/LenB只是从该内存位置拉出长度,它们不必遍历字符串就知道它的长度.另一方面,使用字符串比较还有很多工作要做.另外,避免在VB中使用""",因为它总是分配一个新的字符串.使用`vbNullString`代替它,因为它是一个常量并且不使用更多内存.
我知道这个问题并且响应很旧,只是认为我添加使用Len()来测试字符串(以及返回字符串的函数)似乎比VBA中的文字字符串比较更快.

5> Leo Moore..:

在VB中它通常Dir会找到该文件的目录.如果它不是空白则存在然后用于Kill删除文件.

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



6> Brettski..:

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

Dim fso as New FileSystemObject, aFile as File

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有