ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Open all files, ignore some (https://www.excelbanter.com/excel-programming/328398-open-all-files-ignore-some.html)

Steph[_3_]

Open all files, ignore some
 
Hi. The below code opens all files within a given folder, and consolidates
them into 1 file, 1 sheet. In each of the files to be consolidated, I have
a veryhidden sheet called Test. Is there a way to have the code open files
within the folder and consolidate ONLY the files that contain the sheet
Test? These files are templates that are being emailed in. I just want to
make sure that the file I get back is my file, so the formats are exactly
the same. Also, it would be great to write a log to a text file that
detailed the names of the files that were not consolidated becasue they did
not contain the sheet Test. Thanks in advance for any and all of your help

Dim sFolder As String
Dim wb As Workbook
Dim i As Long
Dim fname As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Consol").Select
With Application.FileSearch
.NewSearch
.LookIn = "\\server\folder1\folder2\"
.SearchSubFolders = False
.filename = "*.xls"
.FileType = msoFileTypeExcelWorkbooks
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
Set wb = Workbooks.Open(filename:=.FoundFiles(i))
fname = Left(ActiveWorkbook.name, Len(ActiveWorkbook.name) - 4)
wb.ActiveSheet.Range("G5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Valu e = fname
wb.ActiveSheet.Range("A5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Copy
ThisWorkbook.Worksheets("Consol").Range("A" & _

ThisWorkbook.Worksheets("Consol").Range("D65536"). End(xlUp).Offset(1,
0).Row).PasteSpecial _
Paste:=xlPasteValues
wb.Close savechanges:=False
fname = Nothing
Next i
Else
MsgBox "Folder " & sFolder & " contains no required files"
End If
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True



Ron de Bruin

Open all files, ignore some
 
Hi Steph

Normal you must open the file to check the sheet name but you can use this
to check it also without opening the file.

On Error Resume Next
SheetCheck = ExecuteExcel4Macro(PathStr & Range("A1").Address(, , xlR1C1))
If Err.Number < 0 Then
'other code

http://www.rondebruin.nl/summary2.htm
See how i use it here


--
Regards Ron de Bruin
http://www.rondebruin.nl



"Steph" wrote in message ...
Hi. The below code opens all files within a given folder, and consolidates
them into 1 file, 1 sheet. In each of the files to be consolidated, I have
a veryhidden sheet called Test. Is there a way to have the code open files
within the folder and consolidate ONLY the files that contain the sheet
Test? These files are templates that are being emailed in. I just want to
make sure that the file I get back is my file, so the formats are exactly
the same. Also, it would be great to write a log to a text file that
detailed the names of the files that were not consolidated becasue they did
not contain the sheet Test. Thanks in advance for any and all of your help

Dim sFolder As String
Dim wb As Workbook
Dim i As Long
Dim fname As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Consol").Select
With Application.FileSearch
.NewSearch
.LookIn = "\\server\folder1\folder2\"
.SearchSubFolders = False
.filename = "*.xls"
.FileType = msoFileTypeExcelWorkbooks
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
Set wb = Workbooks.Open(filename:=.FoundFiles(i))
fname = Left(ActiveWorkbook.name, Len(ActiveWorkbook.name) - 4)
wb.ActiveSheet.Range("G5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Valu e = fname
wb.ActiveSheet.Range("A5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Copy
ThisWorkbook.Worksheets("Consol").Range("A" & _

ThisWorkbook.Worksheets("Consol").Range("D65536"). End(xlUp).Offset(1,
0).Row).PasteSpecial _
Paste:=xlPasteValues
wb.Close savechanges:=False
fname = Nothing
Next i
Else
MsgBox "Folder " & sFolder & " contains no required files"
End If
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True





Bob Phillips[_6_]

Open all files, ignore some
 
Steph,

here is a revised version. I have included a function to test if a
sheetexists.

BTW, you had a line
fname = Nothing
which errors for me as fname ius a string, so I change it to
fname = ""

Dim sFolder As String
Dim wb As Workbook
Dim i As Long
Dim fname As String
Dim FileNumber As Long

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Consol").Select
FileNumber = FreeFile ' Get unused file
' number.
Open "c:\Findlog" For Output As #FileNumber
With Application.FileSearch
.NewSearch
.LookIn = "\\server\folder1\folder2\"
.SearchSubFolders = False
.Filename = "*.xls"
.FileType = msoFileTypeExcelWorkbooks
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
If SheetExists("Test", wb) Then
fname = Left(ActiveWorkbook.Name,
Len(ActiveWorkbook.Name) - 4)
wb.ActiveSheet.Range("G5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).row).Valu e =
fname
wb.ActiveSheet.Range("A5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).row).Copy
ThisWorkbook.Worksheets("Consol").Range("A" & _

ThisWorkbook.Worksheets("Consol").Range("D65536"). End(xlUp).Offset(1,
0).row).PasteSpecial _
Paste:=xlPasteValues
wb.Close savechanges:=False
fname = ""
Else
Write #FileNumber, wb.FullName
End If
Next i
Else
MsgBox "Folder " & sFolder & " contains no required files"
End If
End With
Close #FileNumber
Application.ScreenUpdating = True
Application.DisplayAlerts = True





'-----------------------------------------------------------------
Function SheetExists(Sh As String, _
Optional wb As Workbook) As Boolean
'-----------------------------------------------------------------
Dim oWs As Worksheet
If wb Is Nothing Then Set wb = ActiveWorkbook
On Error Resume Next
SheetExists = CBool(Not wb.Worksheets(Sh) Is Nothing)
On Error GoTo 0
End Function







--

HTH

RP
(remove nothere from the email address if mailing direct)


"Steph" wrote in message
...
Hi. The below code opens all files within a given folder, and

consolidates
them into 1 file, 1 sheet. In each of the files to be consolidated, I

have
a veryhidden sheet called Test. Is there a way to have the code open

files
within the folder and consolidate ONLY the files that contain the sheet
Test? These files are templates that are being emailed in. I just want

to
make sure that the file I get back is my file, so the formats are exactly
the same. Also, it would be great to write a log to a text file that
detailed the names of the files that were not consolidated becasue they

did
not contain the sheet Test. Thanks in advance for any and all of your

help

Dim sFolder As String
Dim wb As Workbook
Dim i As Long
Dim fname As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Consol").Select
With Application.FileSearch
.NewSearch
.LookIn = "\\server\folder1\folder2\"
.SearchSubFolders = False
.filename = "*.xls"
.FileType = msoFileTypeExcelWorkbooks
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
Set wb = Workbooks.Open(filename:=.FoundFiles(i))
fname = Left(ActiveWorkbook.name, Len(ActiveWorkbook.name) -

4)
wb.ActiveSheet.Range("G5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Valu e = fname
wb.ActiveSheet.Range("A5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Copy
ThisWorkbook.Worksheets("Consol").Range("A" & _

ThisWorkbook.Worksheets("Consol").Range("D65536"). End(xlUp).Offset(1,
0).Row).PasteSpecial _
Paste:=xlPasteValues
wb.Close savechanges:=False
fname = Nothing
Next i
Else
MsgBox "Folder " & sFolder & " contains no required files"
End If
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True





Steph[_3_]

Open all files, ignore some
 
Thank you so much!

"Bob Phillips" wrote in message
...
Steph,

here is a revised version. I have included a function to test if a
sheetexists.

BTW, you had a line
fname = Nothing
which errors for me as fname ius a string, so I change it to
fname = ""

Dim sFolder As String
Dim wb As Workbook
Dim i As Long
Dim fname As String
Dim FileNumber As Long

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Consol").Select
FileNumber = FreeFile ' Get unused file
' number.
Open "c:\Findlog" For Output As #FileNumber
With Application.FileSearch
.NewSearch
.LookIn = "\\server\folder1\folder2\"
.SearchSubFolders = False
.Filename = "*.xls"
.FileType = msoFileTypeExcelWorkbooks
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
Set wb = Workbooks.Open(Filename:=.FoundFiles(i))
If SheetExists("Test", wb) Then
fname = Left(ActiveWorkbook.Name,
Len(ActiveWorkbook.Name) - 4)
wb.ActiveSheet.Range("G5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).row).Valu e =
fname
wb.ActiveSheet.Range("A5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).row).Copy
ThisWorkbook.Worksheets("Consol").Range("A" & _

ThisWorkbook.Worksheets("Consol").Range("D65536"). End(xlUp).Offset(1,
0).row).PasteSpecial _
Paste:=xlPasteValues
wb.Close savechanges:=False
fname = ""
Else
Write #FileNumber, wb.FullName
End If
Next i
Else
MsgBox "Folder " & sFolder & " contains no required files"
End If
End With
Close #FileNumber
Application.ScreenUpdating = True
Application.DisplayAlerts = True





'-----------------------------------------------------------------
Function SheetExists(Sh As String, _
Optional wb As Workbook) As Boolean
'-----------------------------------------------------------------
Dim oWs As Worksheet
If wb Is Nothing Then Set wb = ActiveWorkbook
On Error Resume Next
SheetExists = CBool(Not wb.Worksheets(Sh) Is Nothing)
On Error GoTo 0
End Function







--

HTH

RP
(remove nothere from the email address if mailing direct)


"Steph" wrote in message
...
Hi. The below code opens all files within a given folder, and

consolidates
them into 1 file, 1 sheet. In each of the files to be consolidated, I

have
a veryhidden sheet called Test. Is there a way to have the code open

files
within the folder and consolidate ONLY the files that contain the sheet
Test? These files are templates that are being emailed in. I just want

to
make sure that the file I get back is my file, so the formats are

exactly
the same. Also, it would be great to write a log to a text file that
detailed the names of the files that were not consolidated becasue they

did
not contain the sheet Test. Thanks in advance for any and all of your

help

Dim sFolder As String
Dim wb As Workbook
Dim i As Long
Dim fname As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Sheets("Consol").Select
With Application.FileSearch
.NewSearch
.LookIn = "\\server\folder1\folder2\"
.SearchSubFolders = False
.filename = "*.xls"
.FileType = msoFileTypeExcelWorkbooks
If .Execute() 0 Then
For i = 1 To .FoundFiles.Count
Set wb = Workbooks.Open(filename:=.FoundFiles(i))
fname = Left(ActiveWorkbook.name, Len(ActiveWorkbook.name) -

4)
wb.ActiveSheet.Range("G5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Valu e = fname
wb.ActiveSheet.Range("A5:G" & _
wb.ActiveSheet.Range("D65536").End(xlUp).Row).Copy
ThisWorkbook.Worksheets("Consol").Range("A" & _

ThisWorkbook.Worksheets("Consol").Range("D65536"). End(xlUp).Offset(1,
0).Row).PasteSpecial _
Paste:=xlPasteValues
wb.Close savechanges:=False
fname = Nothing
Next i
Else
MsgBox "Folder " & sFolder & " contains no required

files"
End If
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True








All times are GMT +1. The time now is 06:00 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com