Я пытаюсь объединить несколько файлов, каждый из которых находится в отдельной папке, в одну папку - PullRequest
0 голосов
/ 09 октября 2018

Мне нужно скопировать более 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

End Sub

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Нашел решение.Нужно немного подправить, но у меня все готово.Спасибо всем, кто приложил усилия, чтобы помочь.Проблема заключалась в том, что я не давал имя файла месту назначения только для папки (нет .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

...

0 голосов
/ 09 октября 2018

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 \, но это только МО.Полагаться на то, что пользователь вводит статический ввод, например 01 января , безошибочно - глупо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...