End Function我会留给你找出" /> End Function我会留给你找出" /> End Function我会留给你找出" />

首页 / 知识

在VBA中删除文件

2023-04-15 15:49:00

在VBA中删除文件

Deleting a file in VBA

使用VBA,我该怎么做:

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

  • 1.)点击这里。基本上这样做:

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

    我会留给你找出所需的各种错误处理,但这些都是我正在考虑的错误处理事项之一:

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

    2.)如何删除文件。看这个。基本上使用Kill命令,但您需要允许文件是只读的。这是给你的功能:

    1
    2
    3
    4
    5
    6
    7
    8
    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

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

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

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

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


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

    1
    2
    3
    4
    5
    With New FileSystemObject
        If .FileExists(yourFilePath) Then
            .DeleteFile yourFilepath
        End If
    End With

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

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


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

    1
    2
    3
    4
    5
    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
    2
    3
    4
    5
    Dim aFile As String
    aFile ="c:\file_to_delete.txt"
    If Len(Dir$(aFile)) > 0 Then
         Kill aFile
    End If

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

    1
    2
    3
    4
    test = Dir(Filename)
    If Not test ="" Then
        Kill (Filename)
    End If

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

    1
    2
    3
    4
    5
    6
    Dim fso as New FileSystemObject, aFile as File

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


    这是一个提示:您是重新使用文件名,还是计划立即执行需要删除的操作?

    没有?

    您可以使用VBA从命令提示符异步使用VBA.Shell激活命令DEL"C: TEMP scratchpad.txt"/ F:

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

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

    如果它是一个大文件,或者它是在一个缓慢的网络连接上,那么即便消失即可。
    当然,你永远不会看到这是否有效;但是你立即恢复你的VBA,有时这比等待网络要好。


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

    请参阅此处的MSDN文章。


    删除文件文件删除点击这里

    最新内容

    相关内容

    猜你喜欢