跳到主要内容

复制、移动、删除、重命名文件

在 Excel VBA 中,我们可以使用 FileSystemObject(FSO)对象或 VBA 内置文件处理函数来复制、移动、删除或重命名文件。

复制文件

使用 CopyFile 方法复制文件

Sub CopyFileUsingFSO()
    Dim fso As Object
    Dim sourceFile As String
    Dim destinationFile As String
    
    sourceFile = "D:\Demo\test.txt"      ' 源文件路径
    destinationFile = "D:\Demo\Temp\test.txt"  ' 目标文件路径
    
    ' 创建 FileSystemObject 实例
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 始果代码出错会跳转到 ErrorHandler 标签
    On Error GoTo ErrorHandler
    ' 复制文件,False 参数表示不覆盖同名文件
    fso.CopyFile sourceFile, destinationFile, False
    
    ' 清理
    Set fso = Nothing
    Exit Sub
    
' 如果文件复制过程中发生错误(例如文件不存在、目标路径不存在等),显示错误信息。
ErrorHandler:
    MsgBox "复制文件时出错:" & Err.Description, vbCritical
End Sub

注意

FileSystemObject 对象的 CopyFile 方法默认会覆盖目标路径下的同名文件,如果需要不覆盖目标路径下的同名文件,要设置第三参数为 False,或者你可以先检查目标文件是否存在并根据需要不否覆盖。

目标路径必须是一个有效的路径,且必须具有写入权限。

若要重命名复制的文件,只需在目标路径中包含新文件名即可:

FileSystemObject.CopyFile "D:\Demo\test.txt", "D:\Demo\Temp\test_new.txt"

使用 FileCopy 语句复制文件

Sub CopyFileUsingFileCopy()
    Dim sourceFile As String
    Dim destinationFile As String
    
    sourceFile = "D:\Demo\test.txt"      ' 源文件路径
    destinationFile = "D:\Demo\Temp\3test.txt"  ' 目标文件路径
    
    ' 始果代码出错会跳转到 ErrorHandler 标签
    On Error GoTo ErrorHandler
    ' 使用 FileCopy 复制文件
    FileCopy sourceFile, destinationFile
    
    MsgBox "文件复制成功!", vbInformation
    Exit Sub

' 如果文件复制过程中发生错误(例如文件不存在、目标路径不存在等),显示错误信息。
ErrorHandler:
    MsgBox "复制文件时出错:" & Err.Description, vbCritical
End Sub

注意

使用 FileCopy 会覆盖目标路径下的同名文件,所以要确保目标文件夹中没有同名文件,或者你可以先检查目标文件是否存在并根据需要不否覆盖。

目标路径必须是一个有效的路径,且必须具有写入权限。

若要重命名复制的文件,只需在目标路径中包含新文件名即可:

FileCopy "D:\Demo\test.txt", "D:\Demo\Temp\test_new.txt"

移动文件

使用 MoveFile 方法移动文件

Sub MoveFileUsingFSO()
    Dim fso As Object
    Dim sourceFile As String
    Dim destinationFile As String
    
    sourceFile = "D:\Demo\test.txt"      ' 源文件路径
    destinationFile = "D:\Demo\Temp\test.txt"  ' 目标文件路径
    
    ' 创建 FileSystemObject 实例
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 检查源文件是否存在
    If fso.FileExists(sourceFile) Then
        ' 检目标文件路径是否存在同名文件
        If fso.FileExists(destinationFile) Then
            MsgBox "文件已存在!", vbCritical
        Else
            ' 移动文件
            fso.MoveFile sourceFile, destinationFile
            MsgBox "文件移动成功!", vbInformation
        End If
    Else
        MsgBox "源文件不存在!", vbCritical
    End If
    
    ' 清理
    Set fso = Nothing
End Sub

注意

使用 FileSystemObject 对象的 MoveFile 方法移动文件时,如果目标路径否存在同名文件会出错,为避免出错,应该检查目标路径否存在同名文件。

若要移动并重命名文件,只需在目标路径中包含新文件名即可:

FileSystemObject.MoveFile "D:\Demo\test.txt", "D:\Demo\Temp\test_new.txt"

使用 Name 语句移动文件

Sub MoveFileUsingName()
    Dim sourceFile As String
    Dim destinationFile As String
    
    sourceFile = "D:\Demo\test.txt"      ' 源文件路径
    destinationFile = "D:\Demo\Temp\test.txt"  ' 目标文件路径
    
    ' 移动文件
    On Error GoTo ErrorHandler
    Name sourceFile As destinationFile
    
    MsgBox "文件移动成功!", vbInformation
    Exit Sub
    
ErrorHandler:
    MsgBox "移动文件时出错:" & Err.Description, vbCritical
End Sub

注意

Name 语句不但可以用来重命名文件,而且也可以用来移动文件。当源文件和目标文件位于不同目录时,Name 语句会将文件从源路径“移动”到目标路径。

删除文件

使用 DeleteFile 方法删除文件

Sub DeleteFile()
    Dim fso As Object
    Dim filePath As String
    
    filePath = "D:\Demo\test.txt"  ' 要删除的文件路径
    
    ' 创建 FileSystemObject 实例
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' 检查文件是否存在
    If fso.FileExists(filePath) Then
        ' 删除文件
        fso.DeleteFile filePath
        MsgBox "文件已删除!"
    Else
        MsgBox "文件不存在!"
    End If
    
    ' 清理
    Set fso = Nothing
End Sub

注意

使用 FileSystemObject 对象的 DeleteFile 方法时,如果要删除带有只读属性的文件,则应该设置 DeleteFile 的第二参数为 True(如:fso.DeleteFile filePath, True),否则会出错显示"拒绝的权限"。

使用 Kill 语句删除文件

Sub DeleteFileUsingKill()
    Dim filePath As String
    
    filePath = "D:\Demo\test.txt"  ' 要删除的文件路径
    
    ' 始果代码出错会跳转到 ErrorHandler 标签
    On Error GoTo ErrorHandler
    
    ' 删除文件
    Kill filePath

    Exit Sub
    
' 如果文件删除过程中发生错误(例如文件不存在、只读文件等),显示错误信息。
ErrorHandler:
    MsgBox "删除文件时出错:" & Err.Description, vbCritical
End Sub

注意

如果对一个已经打开的文件使用 Kill 语句删除时会产生运行错误。

在 Microsoft Windows 中,Kill 支持使用多字符通配符 (*) 和单字符通配符 (?) 来指定多个文件。如:

Kill "D:\Demo\test.txt" ' 删除 test.txt
Kill "D:\Demo\2024年*.txt" ' 删除2024年开头的txt文件
Kill "D:\Demo\2024年?月.txt" ' 删除以2024年开头以月结尾,中间一个任意字符的txt文件
Kill "D:\Demo\*.txt" ' 删除所有txt文件

重命名文件

如前面的例子所示,使用 FSO 对象的 CopyFile 方法、MoveFile 方法或 FileCopy 语句、Name 语句均可以重命名文件。如果你只需要重命名文件,使用 Name 语句简单,如果你需要更多的控制(例如检查文件是否存在、删除多个文件等),FileSystemObject 对象更适合。

总结

  • 复制文件fso.CopyFile(可设置是否覆盖同名文件)或 FileCopy 语句
  • 移动文件fso.MoveFileName 语句
  • 删除文件fso.DeleteFile (可删除只读属性文件)或 Kill 语句(支持通配符)
  • 重命名文件:使用 fso.CopyFilefso.MoveFile 或 Name 语句

使用 Excel VBA 内置语句操作文件不需要额外引用,简单易用,如果你需要更多的控制,FileSystemObject 对象更适合。

评论

您的电子邮件地址不会显示出来。*号为必填项。