Downloading multiple files

T

tekman

I am trying to write a macro that will download csv files from an online
database automatically.

Each of these files has a common file name with a date stamp and a time
stamp in the file name:
"filename_20051117_000236.csv"

I have been able to open a file using a macro with a fixed file name
like this:
Sub Test()
Workbooks.Open Filename:="ftp://user:p[email protected]/dataextracts/folder/filename"
End Sub

What I would like to do (if possible) is to open several files using a
loop, but the last digits (time stamp) are not repeatable, as the files
are dumped "around" a specific time.

Is there a way to use a loop to d/l several days worth of data, in
other words: increment the datestamp, but use a wildcard or something
for the timestamp?

Thanks for the help

Lee
 
G

Guest

we have our FTP sites mapped to a logical drive...which means that they can
be accessed through our applications quite easily.
Once that's done, its quite easy to use the DIR() function -

Option Explicit

Const filepath = "H:\Excel_Demos\"
Const filenameroot = "filename_YYYYMMDD_*.CSV"

Public Sub MAIN()
Dim thisdate As Date
thisdate = Date
OpenCSV Replace(filenameroot, "YYYYMMDD", Format$(thisdate, "YYYYMMDD"))
End Sub


Private Sub OpenCSV(sFile As String)
Dim fn As String
Dim WB As Workbook
fn = Dir(filepath & sFile)
Do Until fn = ""
Set WB = Workbooks.Open(filepath & fn)
'
'process file
ProcessWB WB
WB.Close False

'next file
fn = Dir()
Loop

End Sub
Private Sub ProcessWB(WB As Workbook)
'do stuff
End Sub
 
M

Mark Ivey

Lee,

I was doing something similar with a project of mine at work. Here are the basics to get it going...


--------------------------------------------------------------------------------

Sub Main()

Sheets("Sheet1").Select

Range("A1").Select

Application.ScreenUpdating = False

Call OpenFiles

Application.ScreenUpdating = True

End Sub



Sub OpenFiles()

Dim fn As Variant, f As Integer, i As Integer, counter As Integer

i = 1

fn = Application.GetOpenFilename("CSV Files,*.csv", _

1, "Select One Or More Files To Open", , True)

If TypeName(fn) = "Boolean" Then Exit Sub

For f = 1 To UBound(fn)

Debug.Print "Selected file #" & f & ": " & fn(f)

Workbooks.Open fn(f)



While i = 1

Range("A1:J1").Select

Selection.Copy

Windows("Work_basic version.xls").Activate 'Change the filename to match yours

Range("A1").Select

ActiveSheet.Paste

i = i + 1

Wend



If (f > 1) Then

While (i <= f)

Range("A1:J1").Select

Selection.Copy

Windows("Work_basic version.xls").Activate 'Change the filename to match yours

Range("A1:J1").Select

Cells(i, 1).Select

ActiveSheet.Paste

i = i + 1

Wend

End If



ActiveWindow.ActivateNext

ActiveWindow.Close False



Next f

End Sub


--------------------------------------------------------------------------------


--
Mark Ivey

UoP e-mail: (e-mail address removed)
Personal e-mail: (e-mail address removed)

I am trying to write a macro that will download csv files from an online
database automatically.

Each of these files has a common file name with a date stamp and a time
stamp in the file name:
"filename_20051117_000236.csv"

I have been able to open a file using a macro with a fixed file name
like this:
Sub Test()
Workbooks.Open Filename:="ftp://user:p[email protected]/dataextracts/folder/filename"
End Sub

What I would like to do (if possible) is to open several files using a
loop, but the last digits (time stamp) are not repeatable, as the files
are dumped "around" a specific time.

Is there a way to use a loop to d/l several days worth of data, in
other words: increment the datestamp, but use a wildcard or something
for the timestamp?

Thanks for the help

Lee
 
T

tekman

I appreciate all of the help, I will play with this over the weekend.

Great Site!



Lee
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top