使用VBA复制文件:5个示例代码

2022-11-16 10:56:44 浏览数 (1)

标签:VBA,FileCopy方法

我们可以使用VBA来复制文件,这里介绍5个实现VBA复制文件的示例。

示例1:复制文件

下面的代码将openpyxl.xlsx从文件夹D:完美Excel复制到D:完美Excel我的文章

代码语言:javascript复制
Sub CopyFile()
    FileCopy "D:完美Excelopenpyxl.xlsx", _
        "D:完美Excel我的文章openpyxl.xlsx"
End Sub

注意,在本例中,文件名不变。

示例2:使用变量复制文件

在示例1中,文件名包含在FileCopy语句中。然而,它们也可以作为变量提供。

在下面的代码中:

  • 声明变量
  • 将值赋值给变量
  • 变量用于FileCopy语句中
代码语言:javascript复制
Sub CopyFileVariables()
    Dim copyFromFile As String
    Dim copyToFile As String
    copyFromFile = "D:完美Excelopenpyxl.xlsx"
    copyToFile = "D:完美Excelopenpyxl-副本.xlsx"
    FileCopy copyFromFile, copyToFile
End Sub

注意,在本例中,不会将文件复制到新位置,但将其从openpyxl.xlsx重命名为openpyxl-副本.xlsx。

示例3:基于单元格值复制文件

在本例中,我们使用单元格值中包含的文件路径复制文件。

如下图1所示,单元格C2包含当前文件路径,单元格C4包含文件要复制到的路径。

图1

可以运行下面的代码来使用这些单元格值重命名文件。

代码语言:javascript复制
Sub CopyFileCellValue()
    FileCopy ActiveSheet.Range("C2"), _
        ActiveSheet.Range("C4")
End Sub

注意,在本例中,文件被复制到一个新文件夹,并从openpyxl.xlsx重命名为openpyxl-副本.xlsx。

示例4:在VBA复制之前检查文件是否存在

FileCopy命令将覆盖文件,而不会显示任何错误。因此,在复制文件之前,最好先检查文件是否已经存在。

下面的代码检查目标位置中是否存在文件。如果文件存在,则会出现一个带有“是/否”选项的消息框。单击“否”将退出宏。

代码语言:javascript复制
Sub CheckTargetFileCopy()
    Dim copyFromFile As String
    Dim copyToFile As String
    Dim msgBoxAnswer As Long
    copyFromFile = "D:完美Excelopenpyxl.xlsx"
    copyToFile = "D:完美Excel我的文章openpyxl-副本.xlsx"
    If Dir(copyToFile) <> "" Then
        msgBoxAnswer = MsgBox(Prompt:="在此位置中该文件已存在." & _
        vbNewLine & "你想覆盖它?", Buttons:=vbYesNo, _
        Title:="复制文件")
        If msgBoxAnswer = vbNo Then
            Exit Sub
        End If
    End If
    FileCopy copyFromFile, copyToFile
End Sub

示例5:复制文件时避免错误

复制文件可能会引发错误。下面的代码构建在示例4的基础上,如果出现任何错误,也会显示一个错误消息框。

代码语言:javascript复制
Sub FileCopyPlus()
    Dim copyFromFile As String
    Dim copyToFile As String
    Dim msgBoxAnswer As Long
    copyFromFile = "D:完美Excelopenpyxl.xlsx"
    copyToFile = "D:完美Excel我的文章openpyxl-副本.xlsx"
    On Error Resume Next
    If Dir(copyToFile) <> "" Then
        msgBoxAnswer = MsgBox(Prompt:="在此位置中该文件已存在." & _
        vbNewLine & "你想覆盖它?", Buttons:=vbYesNo, _
        Title:="复制文件")
        If msgBoxAnswer = vbNo Then
            Exit Sub
        End If
    End If
    FileCopy copyFromFile, copyToFile
    If Err.Number <> 0 Then
        MsgBox Prompt:="不能复制文件", _
          Buttons:=vbOKCancel, _
          Title:="复制文件错误"
    End If
    On Error GoTo 0
End Sub

在自动化复制文件时可能会导致错误,下面是一些常见错误:

  • 复制不存在的文件会触发错误:运行时错误’53’:找不到文件。
  • 将文件复制到锁定的文件位置(即另一个用户打开了该文件)会触发错误:运行时错误‘0‘:权限被拒绝

0 人点赞