我需要将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
结束子
答案 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
...