【问题标题】:Error "Path/File Not Found" using the CopyFile method使用 CopyFile 方法时出现错误“找不到路径/文件”
【发布时间】:2019-06-17 00:39:25
【问题描述】:

我正在尝试将工作表作为 PDF 文件保存到桌面,然后使用 CopyFile 方法将文件复制到另一个位置。

我收到错误

“找不到文件”

“找不到路径”

当使用CopyFile 方法时,它会在桌面上创建一个文件,然后在复制文件时抛出错误。

在此之前,我尝试创建 pdf 两次,一个接一个,它在桌面上创建并在相关的每月文件夹中创建另一个。

我尝试了关于这两个变量的不同语法。

Sub Save_Invoice_To_PDF()

Dim Fso As Scripting.FileSystemObject
Dim Invoice As Worksheet
Dim Fname As String
Dim Path1 As String
Dim Path2 As String
Dim PndSign As String
Dim Mth As String
Dim Mth1 As String

Set Invoice = Sheet1

PndSign = Chr(163)

Mth = Invoice.Range("A16").Value
Mth1 = MonthName(Month(Mth))

Path1 = "C:\Users\Peter\Desktop\"
Path2 = "C:\Users\Peter\Documents\Business\Sent Invoices\" & Mth1 & "\"
Fname = Range("C16").Value & " " & Range("A8").Value & " " & _
  PndSign & "" & Range("E46").Value _
  & " " & Format(Range("A16"), "dd-mm-yyyy") & ".pdf"

Application.ScreenUpdating = False

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
  Filename:=Path1 & " " & Fname, _
  Quality:=xlQualityStandard, IncludeDocProperties:=True, _
  IgnorePrintAreas:=False, _
  OpenAfterPublish:=False
  
Set Fso = New FileSystemObject

Fso.CopyFile Source:="C:\Users\Peter\Desktop\" & Fname, _
  Destination:="C:\Users\Peter\Business\Invoices\Sent Invoices\ _
  " & Mth1 & "\"

Set Fso = Nothing

Application.ScreenUpdating = True

End Sub

我想将一个 pdf 保存到桌面并将该 pdf 复制到在 Mth1 变量中指定的每月文件夹,该变量部分来自文件 Fname 变量,即 Format(Range("A16"), "dd-mm-yyyy")

【问题讨论】:

  • .CopyFile 代码无法编译,因为 _ 字符串已损坏?请发布真实代码。注意 Mth1 目录必须存在,它不会被创建。有一个内置的 FileCopy() 函数,因此您可以删除不必要的 FSO 代码。
  • 在您尝试将文件复制到其中时,"C:\Users\Peter\Business\Invoices\Sent Invoices\ _ " & Mth1 & "\" 是否存在?如果没有,我相当肯定.CopyFile 会失败。如果目录不存在,您将必须创建
  • 另外,"C:\Users\Peter\Business\Invoices\Sent Invoices\ _ " & Mth1 & "\" 在实际路径中使用“_”可能根本无效。如果您尝试使用_ 进行续行,则需要将其 引用的字符串之外。在您的 FSO.CopyFile 行中,您可以使用 Destination:=Path2 来避免拼写错误,特别是因为您声明了 Path2 并且没有以其他方式使用它。

标签: excel vba excel-2007


【解决方案1】:

我遇到了同样的问题,据我所见,很多人都问过这个问题。我认为您在 FileCopy 命令之前有一个命令来创建将复制文件的文件夹时会产生问题。因此,比硬盘驱动器更快的编译器无法找到该文件夹​​,因为这就是您现在正在创建的。 如果您在命令 FileCopy 之前延迟 1 秒 , 像这样..

Application.Wait (Now + TimeValue("0:00:01"))

问题会解决的

【讨论】:

    【解决方案2】:

    您的代码以这样一种方式运行,即它试图在文件创建之前复制它。 如果文件存在于特定目录中,我使用睡眠和 while 循环,然后移动下一个命令或等待或睡眠。

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 2014-08-30
      • 1970-01-01
      相关资源
      最近更新 更多