代码不起作用:使用 vba 将文件从一个目录复制到另一个目录

Posted

技术标签:

【中文标题】代码不起作用:使用 vba 将文件从一个目录复制到另一个目录【英文标题】:code not working: Copy file From one directory to another with vba 【发布时间】:2018-08-14 01:12:18 【问题描述】:

我编写了一个 VBA 代码来将文件从一个目录复制到另一个目录;但我不知道为什么它不起作用。有任何想法吗?我知道如何使用 FileSystemObject 来做,但我想学习——用 SHELL 来做。

Sub copy_file()

    Dim dirPath As String, srcFile As String

    dirPath = "E:\Download\"
    srcFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name

    Shell ("cmd /c copy /y """ & srcFile & " " & dirPath & """")

End Sub

【问题讨论】:

“不工作” - 这是什么意思?发生了什么事? 【参考方案1】:

你太复杂了。

您无需为此使用 Shell 并通过命令行。

有一个内置命令:FileCopy


示例

此示例使用FileCopy 语句将一个文件复制到另一个文件。出于本示例的目的,假设这是一个包含一些数据的文件。

Dim SourceFile, DestinationFile 
SourceFile = "SRCFILE" ' Define source file name. 
DestinationFile = "DESTFILE" ' Define target file name. 
FileCopy SourceFile, DestinationFile ' Copy source to target. 

阅读 FileCopy at the source 的文档。

我还建议花几分钟时间阅读所有标准 VBA 对象及其可用的方法/函数/属性/等,以了解内置的任务类型VBA 和/或 Office 的功能。

Here is the main pageOffice VBA 官方文档。

【讨论】:

谢谢你的回复,但是我想用shell命令来做,我已经知道如何使用FileCopy我想知道一些新的东西,你的代码也会帮助我。【参考方案2】:

srcFile 与您用来保存 vba 代码的文件相同,因此该文件已打开。在这种情况下,Windows shell 复制命令将无法正常工作。 您可以使用 ActiveWorkbook.SaveAs 方法复制打开的源文件。 延伸阅读:How to do a "Save As" in vba code, saving my current Excel workbook with datestamp? 进一步的问题:您的活动工作簿将立即重命名,因此您必须关闭它。为了避免在退出前保存为对话框,请阅读该教程:https://support.microsoft.com/en-us/help/213428/how-to-suppress-save-changes-prompt-when-you-close-a-workbook-in-excel

【讨论】:

【参考方案3】:

Shell("cmd /c copy /y """ & srcFile & " " & dirPath & """")

报价问题。您应该检查您的路径并尝试以下代码:

Sub copy_file()

Dim dirPath As String, srcFile As String

dirPath = "E:\Download\"
srcFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name
MsgBox "cmd /c copy /y " & srcFile & " " & dirPath
Shell ("cmd /c copy /y " & srcFile & " " & dirPath)

结束子

【讨论】:

谢谢,我会尝试并让您知道。 感谢您的帮助,我尝试了您的方法,但没有成功。 能否提供详细的错误信息? 您是否将 Excel 工作表保存到特殊位置?

以上是关于代码不起作用:使用 vba 将文件从一个目录复制到另一个目录的主要内容,如果未能解决你的问题,请参考以下文章

VBA:循环遍历各种Excel文件并将列复制到主文件中[关闭]

将范围复制到新的工作簿 FileDialog 提示不起作用

插入代码时,打开事件中的 Excel 2010 vba EnableEvent 不起作用

如何让自动填充在 VBA 中工作?

请教,使用VBA如何控制不能在窗体的文本控件中使用复制/粘贴功能?也就是Ctrl+C、+V不起作用。谢谢。

将文件夹从 Android 应用程序复制到本地 Windows 目录