Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 1
Default open files in loop with date order

Hello

how are you


i am using Excel 2002,

i want to know is there any way to Open Files one by one from a Folder

my files names are actuly based on dates

like

01-Jan-02
02-Jan-02
.....
......
..
..


11-Jan-02

..
...
.....


i have a code which i'll apply when that file open

but dont know how to do above task


please kindly help me out

thanks,

  #2   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 2,510
Default open files in loop with date order

And Hello to you too,

This is a method that I have used. It requires copying the file names to a
worksheet and extracting the date component to a separate column and then
sorting the filename and date column. Then looping through the sorted file
names.

Just a little extra advice, if you are going to use dates for file names
then I find it is better to put them in yyyy-mm-dd format for the file name.
This way they can be ordered by file name in the file open dialog box.
However, the macro below works with the date format dd-mm-yy that you said
has been used.

If you have any problems with it then feel free to get back to me

Sub LoopFileOpen()
Dim strPath As String
Dim wsSht2 As Worksheet
Dim strFileName As String
Dim i As Single
Dim rngSort As Range
Dim rngFileNames As Range
Dim f As Range
Dim strThisWB As String

strThisWB = ThisWorkbook.Name

Set wsSht2 = Sheets("Sheet2")
wsSht2.Columns("B:B").NumberFormat = "d/m/yyyy"
wsSht2.Cells(1, 1) = "File Name"
wsSht2.Cells(1, 2) = "Date"

strPath = CurDir 'Set strPath this to the required path
With Application.FileSearch
.NewSearch
.LookIn = strPath
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
strFileName = Mid(.FoundFiles(i), _
InStrRev(.FoundFiles(i), "\") + 1)
If strFileName < strThisWB Then
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) _
= strFileName
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) _
= DateValue(Left(strFileName, _
InStr(1, strFileName, ".") - 1))
End If
Next i
Else
MsgBox "There were no files found."
End If
End With

With wsSht2
Set rngSort = Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(xlUp))
End With

rngSort.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Set rngFileNames = wsSht2.Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))

For Each f In rngFileNames
Workbooks.Open Filename:=f.Value
'Delete msgbox and put your code here
'(or call another procedure)
MsgBox "File opened is " & f.Value
Next f


End Sub


Regards,

OssieMac



" wrote:

Hello

how are you


i am using Excel 2002,

i want to know is there any way to Open Files one by one from a Folder

my files names are actuly based on dates

like

01-Jan-02
02-Jan-02
.....
......
..
..


11-Jan-02

..
...
.....


i have a code which i'll apply when that file open

but dont know how to do above task


please kindly help me out

thanks,


  #3   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 9,101
Default open files in loop with date order

This code is a little simplier than OssieMac solution. It reads the files
names into an array and then sorts the array. The code is case sensitive.
If you don't care about the case the make this replacement
from
FileNames(FileCount) = Filename
to
FileNames(FileCount) = ucase(Filename)

Sub sortfilename()

Const MyPath = "c:\temp"
Const Filetype = "*.xls"
Dim FileNames(1000)

FileCount = 0
First = True
Do
If First = True Then
Filename = Dir(MyPath & "\" & Filetype)
First = False
Else
Filename = Dir()
End If

If Filename < "" Then
FileNames(FileCount) = Filename
FileCount = FileCount + 1
End If
Loop While Filename < ""

'sort file names
FileCount = FileCount - 1
For i = 0 To (FileCount - 1)
For j = i To FileCount
If FileNames(i) FileNames(j) Then

temp = FileNames(i)
FileNames(i) = FileNames(j)
FileNames(j) = temp
End If
Next j
Next i

'open files
For i = 0 To (FileCount - 1)
Workbooks.Open MyPath & "\" & FileNames(i)

'Enter Your code here
Workbooks(FileNames(i)).Close
Next i
End Sub


"OssieMac" wrote:

And Hello to you too,

This is a method that I have used. It requires copying the file names to a
worksheet and extracting the date component to a separate column and then
sorting the filename and date column. Then looping through the sorted file
names.

Just a little extra advice, if you are going to use dates for file names
then I find it is better to put them in yyyy-mm-dd format for the file name.
This way they can be ordered by file name in the file open dialog box.
However, the macro below works with the date format dd-mm-yy that you said
has been used.

If you have any problems with it then feel free to get back to me

Sub LoopFileOpen()
Dim strPath As String
Dim wsSht2 As Worksheet
Dim strFileName As String
Dim i As Single
Dim rngSort As Range
Dim rngFileNames As Range
Dim f As Range
Dim strThisWB As String

strThisWB = ThisWorkbook.Name

Set wsSht2 = Sheets("Sheet2")
wsSht2.Columns("B:B").NumberFormat = "d/m/yyyy"
wsSht2.Cells(1, 1) = "File Name"
wsSht2.Cells(1, 2) = "Date"

strPath = CurDir 'Set strPath this to the required path
With Application.FileSearch
.NewSearch
.LookIn = strPath
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
strFileName = Mid(.FoundFiles(i), _
InStrRev(.FoundFiles(i), "\") + 1)
If strFileName < strThisWB Then
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) _
= strFileName
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) _
= DateValue(Left(strFileName, _
InStr(1, strFileName, ".") - 1))
End If
Next i
Else
MsgBox "There were no files found."
End If
End With

With wsSht2
Set rngSort = Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(xlUp))
End With

rngSort.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Set rngFileNames = wsSht2.Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))

For Each f In rngFileNames
Workbooks.Open Filename:=f.Value
'Delete msgbox and put your code here
'(or call another procedure)
MsgBox "File opened is " & f.Value
Next f


End Sub


Regards,

OssieMac



" wrote:

Hello

how are you


i am using Excel 2002,

i want to know is there any way to Open Files one by one from a Folder

my files names are actuly based on dates

like

01-Jan-02
02-Jan-02
.....
......
..
..


11-Jan-02

..
...
.....


i have a code which i'll apply when that file open

but dont know how to do above task


please kindly help me out

thanks,


  #4   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 2,510
Default open files in loop with date order

I like the array idea Joel but in its current form it does not work. I
interpreted the OP's post as wanting to sort the filenames so that the date
names were sorted as dates. Your method sorts them as text and not in the
date order. You have a date like 05-Sep-07 coming before 06-Aug-07.

When I originally had to extract files like this I actually started with an
array. However, I ran into problems sorting with the filenames being strings
and the user wanting them sorted as dates.

I then tried extracting the filename to left of the dot and saving as
DateValue(filename) and using Format(array(i),"dd-mm-yy") to convert it back
to a string for the filename. This also failed because we had a user who
saved some files as d-mm-yy. I moved to the method of copying the data to a
worksheet so that I could see what was happening and I created a separate
date column to achieve the correct sorting and retain the original text file
name and then when it all worked, I left it that way.

Maybe a 2 dimensional array is the answer but I haven't tried it.

Regards,

OssieMac


"Joel" wrote:

This code is a little simplier than OssieMac solution. It reads the files
names into an array and then sorts the array. The code is case sensitive.
If you don't care about the case the make this replacement
from
FileNames(FileCount) = Filename
to
FileNames(FileCount) = ucase(Filename)

Sub sortfilename()

Const MyPath = "c:\temp"
Const Filetype = "*.xls"
Dim FileNames(1000)

FileCount = 0
First = True
Do
If First = True Then
Filename = Dir(MyPath & "\" & Filetype)
First = False
Else
Filename = Dir()
End If

If Filename < "" Then
FileNames(FileCount) = Filename
FileCount = FileCount + 1
End If
Loop While Filename < ""

'sort file names
FileCount = FileCount - 1
For i = 0 To (FileCount - 1)
For j = i To FileCount
If FileNames(i) FileNames(j) Then

temp = FileNames(i)
FileNames(i) = FileNames(j)
FileNames(j) = temp
End If
Next j
Next i

'open files
For i = 0 To (FileCount - 1)
Workbooks.Open MyPath & "\" & FileNames(i)

'Enter Your code here
Workbooks(FileNames(i)).Close
Next i
End Sub


"OssieMac" wrote:

And Hello to you too,

This is a method that I have used. It requires copying the file names to a
worksheet and extracting the date component to a separate column and then
sorting the filename and date column. Then looping through the sorted file
names.

Just a little extra advice, if you are going to use dates for file names
then I find it is better to put them in yyyy-mm-dd format for the file name.
This way they can be ordered by file name in the file open dialog box.
However, the macro below works with the date format dd-mm-yy that you said
has been used.

If you have any problems with it then feel free to get back to me

Sub LoopFileOpen()
Dim strPath As String
Dim wsSht2 As Worksheet
Dim strFileName As String
Dim i As Single
Dim rngSort As Range
Dim rngFileNames As Range
Dim f As Range
Dim strThisWB As String

strThisWB = ThisWorkbook.Name

Set wsSht2 = Sheets("Sheet2")
wsSht2.Columns("B:B").NumberFormat = "d/m/yyyy"
wsSht2.Cells(1, 1) = "File Name"
wsSht2.Cells(1, 2) = "Date"

strPath = CurDir 'Set strPath this to the required path
With Application.FileSearch
.NewSearch
.LookIn = strPath
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
strFileName = Mid(.FoundFiles(i), _
InStrRev(.FoundFiles(i), "\") + 1)
If strFileName < strThisWB Then
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) _
= strFileName
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) _
= DateValue(Left(strFileName, _
InStr(1, strFileName, ".") - 1))
End If
Next i
Else
MsgBox "There were no files found."
End If
End With

With wsSht2
Set rngSort = Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(xlUp))
End With

rngSort.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Set rngFileNames = wsSht2.Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))

For Each f In rngFileNames
Workbooks.Open Filename:=f.Value
'Delete msgbox and put your code here
'(or call another procedure)
MsgBox "File opened is " & f.Value
Next f


End Sub


Regards,

OssieMac



" wrote:

Hello

how are you


i am using Excel 2002,

i want to know is there any way to Open Files one by one from a Folder

my files names are actuly based on dates

like

01-Jan-02
02-Jan-02
.....
......
..
..


11-Jan-02

..
...
.....


i have a code which i'll apply when that file open

but dont know how to do above task


please kindly help me out

thanks,


  #5   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 9,101
Default open files in loop with date order

Your assuption is that files files were modified as the names of the files.
Often people modified the files. Using the date value function would solve
the problem.

change the compare in the sort
from
If FileNames(i) FileNames(j) Then
to
If datevalue(FileNames(i)) datevalue(FileNames(j)) Then


the real solution to the problem is your suggestion. Whenever files are
name include a date in the format YYYY-MM-DD.

Joels Monthly Report 2007-02-05
Joels Monthly Report 2007-03-01
Joels Monthly Report 2007-04-02

"OssieMac" wrote:

I like the array idea Joel but in its current form it does not work. I
interpreted the OP's post as wanting to sort the filenames so that the date
names were sorted as dates. Your method sorts them as text and not in the
date order. You have a date like 05-Sep-07 coming before 06-Aug-07.

When I originally had to extract files like this I actually started with an
array. However, I ran into problems sorting with the filenames being strings
and the user wanting them sorted as dates.

I then tried extracting the filename to left of the dot and saving as
DateValue(filename) and using Format(array(i),"dd-mm-yy") to convert it back
to a string for the filename. This also failed because we had a user who
saved some files as d-mm-yy. I moved to the method of copying the data to a
worksheet so that I could see what was happening and I created a separate
date column to achieve the correct sorting and retain the original text file
name and then when it all worked, I left it that way.

Maybe a 2 dimensional array is the answer but I haven't tried it.

Regards,

OssieMac


"Joel" wrote:

This code is a little simplier than OssieMac solution. It reads the files
names into an array and then sorts the array. The code is case sensitive.
If you don't care about the case the make this replacement
from
FileNames(FileCount) = Filename
to
FileNames(FileCount) = ucase(Filename)

Sub sortfilename()

Const MyPath = "c:\temp"
Const Filetype = "*.xls"
Dim FileNames(1000)

FileCount = 0
First = True
Do
If First = True Then
Filename = Dir(MyPath & "\" & Filetype)
First = False
Else
Filename = Dir()
End If

If Filename < "" Then
FileNames(FileCount) = Filename
FileCount = FileCount + 1
End If
Loop While Filename < ""

'sort file names
FileCount = FileCount - 1
For i = 0 To (FileCount - 1)
For j = i To FileCount
If FileNames(i) FileNames(j) Then

temp = FileNames(i)
FileNames(i) = FileNames(j)
FileNames(j) = temp
End If
Next j
Next i

'open files
For i = 0 To (FileCount - 1)
Workbooks.Open MyPath & "\" & FileNames(i)

'Enter Your code here
Workbooks(FileNames(i)).Close
Next i
End Sub


"OssieMac" wrote:

And Hello to you too,

This is a method that I have used. It requires copying the file names to a
worksheet and extracting the date component to a separate column and then
sorting the filename and date column. Then looping through the sorted file
names.

Just a little extra advice, if you are going to use dates for file names
then I find it is better to put them in yyyy-mm-dd format for the file name.
This way they can be ordered by file name in the file open dialog box.
However, the macro below works with the date format dd-mm-yy that you said
has been used.

If you have any problems with it then feel free to get back to me

Sub LoopFileOpen()
Dim strPath As String
Dim wsSht2 As Worksheet
Dim strFileName As String
Dim i As Single
Dim rngSort As Range
Dim rngFileNames As Range
Dim f As Range
Dim strThisWB As String

strThisWB = ThisWorkbook.Name

Set wsSht2 = Sheets("Sheet2")
wsSht2.Columns("B:B").NumberFormat = "d/m/yyyy"
wsSht2.Cells(1, 1) = "File Name"
wsSht2.Cells(1, 2) = "Date"

strPath = CurDir 'Set strPath this to the required path
With Application.FileSearch
.NewSearch
.LookIn = strPath
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
strFileName = Mid(.FoundFiles(i), _
InStrRev(.FoundFiles(i), "\") + 1)
If strFileName < strThisWB Then
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) _
= strFileName
wsSht2.Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) _
= DateValue(Left(strFileName, _
InStr(1, strFileName, ".") - 1))
End If
Next i
Else
MsgBox "There were no files found."
End If
End With

With wsSht2
Set rngSort = Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(xlUp))
End With

rngSort.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Set rngFileNames = wsSht2.Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))

For Each f In rngFileNames
Workbooks.Open Filename:=f.Value
'Delete msgbox and put your code here
'(or call another procedure)
MsgBox "File opened is " & f.Value
Next f


End Sub


Regards,

OssieMac



" wrote:

Hello

how are you


i am using Excel 2002,

i want to know is there any way to Open Files one by one from a Folder

my files names are actuly based on dates

like

01-Jan-02
02-Jan-02
.....
......
..
..


11-Jan-02

..
...
.....


i have a code which i'll apply when that file open

but dont know how to do above task


please kindly help me out

thanks,




  #6   Report Post  
Posted to microsoft.public.excel.misc
external usenet poster
 
Posts: 2,510
Default open files in loop with date order

Hi Joel and also to the OP,

I am really impressed with Joel's input and particularly his last idea for
sorting the datevalues. Overall it is a far better solution, particularly
since FileSearch is no longer supported in xl2007. However, the datevalues
needed another little tweek because the array holds the entire filename
including the .xls ext. I have done this and also included a test for
thisworkbook so that it gets left out of the file list if it just happens to
be in the same folder.

Note that the code should now work for most formats of the date as a
filename even if they are mixed formats such as d-mmm-yy, dd-mm-yyyy.
However, the emphasis is on 'should' because I have not tested it to the nth
degree. The date formats in the original post of dd-mmm-yy should never give
any problems.

Here is a fresh copy of the code with the amendments:-

Sub sortfilename()

Const MyPath = "c:\temp"
Const Filetype = "*.xls"
Dim FileNames(1000)

Dim strThisWb As String

strThisWb = ThisWorkbook.Name
FileCount = 0
First = True
Do
If First = True Then
Filename = Dir(MyPath & "\" & Filetype)
First = False
Else
Filename = Dir()
End If

'Leave out this workbook that contains the macro
If Filename < "" And Filename < strThisWb Then
FileNames(FileCount) = Filename
FileCount = FileCount + 1
End If
Loop While Filename < ""

'sort file names
FileCount = FileCount - 1
For i = 0 To (FileCount - 1)
For j = i To FileCount
If DateValue(Left(FileNames(i), InStr(FileNames(i), ".") - 1)) _
DateValue(Left(FileNames(j), InStr(FileNames(j), ".") - 1)) Then

temp = FileNames(i)
FileNames(i) = FileNames(j)
FileNames(j) = temp
End If
Next j
Next i

'open files
For i = 0 To (FileCount - 1)
'MsgBox only for testing. Delete it and
'remove comment from the following 3 lines
MsgBox FileNames(i)
'Workbooks.Open MyPath & "\" & FileNames(i)
'Enter Your code here
'Workbooks(FileNames(i)).Close
Next i

End Sub

Thanks again Joel for you input here.

Regards,

OssieMac


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to open files in order they were selected Kevin Excel Discussion (Misc queries) 0 July 20th 07 02:54 PM
I cant open files unless I open the Excel program first ElaineAng Excel Discussion (Misc queries) 3 February 16th 06 02:54 PM
How do you open multiple files in specifc order? a_marie1028 Excel Discussion (Misc queries) 0 December 14th 05 01:15 AM
Can not open excel files without open application Taarfa Excel Discussion (Misc queries) 3 July 9th 05 11:56 PM
file open via IE hyperlink causes already open files to shrink and tile Marc Setting up and Configuration of Excel 0 May 4th 05 08:13 PM


All times are GMT +1. The time now is 01:12 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"