【问题标题】:VBA to copy a file from one directory to anotherVBA 将文件从一个目录复制到另一个目录
【发布时间】:2013-06-01 08:02:03
【问题描述】:

所以我有一个访问文件,我经常需要将它复制到另一个目录,替换上一个版本。 我想使用 Excel 宏来实现这一点,并且还想在此过程中重命名文件。

例如

   fileName = "X:\Database\oldName.accdb"
   copyDestination = "Y:\dbstore\"
   newName = "newName.accdb"

有没有简单的方法可以做到这一点?

【问题讨论】:

  • 定期是指每 x 分钟一次吗?
  • 不,我的意思是一天几次

标签: vba copy


【解决方案1】:

在 Scripting.FileSystemObject 中使用适当的方法。然后您的代码将更易于移植到 VBScript 和 VB.net。为了让您开始,您需要包括:

Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")

那么你可以使用

Call fso.CopyFile(source, destination[, overwrite] )

其中源和目标是文件的全名(包括路径)。

https://docs.microsoft.com/en-us/office/vba/Language/Reference/user-interface-help/copyfile-method

【讨论】:

  • 与使用 FileCopy 的其他简单解决方案相比,此解决方案似乎具有以下优势:源文件也可以在打开时复制(例如,通过 MS Access),即当它是“read-只有”。
  • 它说使用 fso.CopyFile 时出现语法错误.......@Bathsheba
【解决方案2】:

使用此代码时让我非常头疼的一件事(可能会影响其他人,我希望有人在这里留下这样的评论供我阅读):

  • 我的目标是创建一个动态访问仪表板,这需要更新其链接表。
  • 我使用上述复制方法将现有链接的 CSV 替换为它们的更新版本。
  • 从模块中手动运行上述代码工作正常。
  • 从链接到 CSV 数据的表单运行相同的代码时出现运行时错误 70(权限被拒绝),即使我的代码的第一步是关闭该表单(它应该已解锁 CSV 文件,以便它可以被覆盖)。
  • 我现在相信,尽管表单已关闭,但它会在执行与该表单关联的 VBA 时锁定过时的 CSV 文件。

我的解决方案是从另一个与数据库一起打开的隐藏表单中运行代码(计时器事件)。

【讨论】:

    【解决方案3】:

    如果您可以选择较少的选项,此方法会更简单:

    FileCopy source, destination
    

    【讨论】:

    • 我测试过,确实,这个方法会自动覆盖。
    • 很好很简单,但是当我使用此解决方案并打开要复制的 Access 数据库时,我收到“拒绝访问”错误。使用 FileSystemObject 时不会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 2017-11-18
    • 2020-06-22
    • 2014-08-12
    • 2013-10-24
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多