我正在尝试将几个文件(每个文件存放在单独的文件夹中)整理到一个文件夹中

时间:2018-10-09 01:26:12

标签: excel vba excel-vba

我需要将20多个文件(每个文件都由唯一的文件夹保存)复制到一个文件夹中。我知道这应该很简单。我创建了下面的代码,但我不断收到“编译错误:对象必填”错误框。下面的代码对我来说听起来不错,所以我真的很难找到错误的出处。

文件夹名称是报告的日期(例如090118),因此,我决定使用循环,直到月底(931)。我还添加了一个错误处理代码,因此我们可以跳过假期和周末。

Sub CopyFiles()

Dim NewFolder As String
Dim NDay As Long
Dim FileName As String
Dim Month As Variant


Month = InputBox("Enter month, eg. 01-January")
NewFolder = "C:\Results\Trading\2018\" & Month & "\Backtest Daily Files\Daily GS\" 'Don't forget to edit this
NDay = 901

On Error Resume Next

Do While NDay < 931


    FileName = Dir("C:\Reports\2018\" & Month & "\0" & NDay & "18\GS_Futures*.cs*")

    FileCopy FileName, NewFolder

    NDay = NDay + 1

Loop

结束子

2 个答案:

答案 0 :(得分:1)

Dir不返回完整路径。它要么仅在找到文件名时返回文件名,否则就返回零长度的字符串。如果要使用确定的路径和文件名引用,则需要在返回的字符串之前添加文件夹前缀。

一个例子是,

...
Do While NDay < 931
    FileName = Dir("C:\Reports\2018\" & Month & "\0" & NDay & "18\GS_Futures*.cs*")

    if cbool(len(filename)) then _
        FileCopy "C:\Reports\2018\" & Month & "\0" & NDay & "18\" & FileName, NewFolder

    NDay = NDay + 1
loop
...

在我看来,在C:\ Reports \ 2018 \中执行递归文件夹搜索会更容易,但这只是MO。依靠用户无误地键入静态输入(如 1月01日)是很愚蠢的。

答案 1 :(得分:0)

找到了解决方案。需要一些调整,但是我已经准备好了。感谢所有付出努力的人。问题是我没有将文件名仅分配给目标文件夹(没有.csv)。

Sub CopyFiles()

Dim NewFolder As String
Dim NDay As Long
Dim FileName As String
Dim Month As String


Month = InputBox("Enter month, eg. 01-January")
NDay = 901

On Error Resume Next

Do While NDay < 931


    FileName = "M:\MRL\2018\" & Month & "\0" & NDay & "18\GS_Futures_0" & NDay & "18.csv"
    NewFolder = "M:\RMC reports\Trading\2018\" & Month & "\Backtest Daily Files\Daily GS\GS_Futures_0" & NDay & "18.csv"


    FileCopy FileName, NewFolder


    NDay = NDay + 1

Loop

End Sub

...