View Full Version : Problems with copying multiple worksheets into one workbook
theresu
11-18-2015, 06:08 AM
I'm trying to copy 70 different Excel-files into one workbook. I have script which are able to put togheter upto 11 different files into one workbook. But after this it starts to copy the same name over again. Can anyone help me to modify my script? I'm a Newbeginner in this.
Here is my script:
Sub Merge2MultiSheets()
Dim wbDst As Workbook
Dim wbSrc As Workbook
Dim wsSrc As Worksheet
Dim MyPath As String
Dim strFilename As String
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
MyPath = "H:\My Documents\Test"
Set wbDst = Workbooks.Add(xlWBATWorksheet)
strFilename = Dir(MyPath & "\*.xls", vbNormal)
If Len(strFilename) = 0 Then Exit Sub
Do Until strFilename = ""
Set wbSrc = Workbooks.Open(Filename:=MyPath & "\" & strFilename)
Set wsSrc = wbSrc.Worksheets(1)
wsSrc.Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count)
wbSrc.Close False
strFilename = Dir()
Loop
wbDst.Worksheets(1).Delete
End Sub
It seems to me that this line is the problem
wsSrc.Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count)
Since all my worksheets have the same name, when it put's them into the New workbook, it gives it a number at the end. When it come to 10, it stops. How do I make it add more worksheets?
mancubus
11-18-2015, 07:20 AM
welcome to vbax.
tested with 200 files with success
credits: snb / kh
Sub vbax_54318_Consolidate_WorkSheets_From_files_In_Same_Folder()
Dim FolderPath As String
Dim FilesInFolder
Dim j As Long, calc As Long
Dim wbDst As Workbook
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
.AskToUpdateLinks = False
calc = .Calculation
.Calculation = xlCalculationManual
End With
FolderPath = "H:\My Documents\Test\"
FilesInFolder = Split(CreateObject("WScript.Shell").Exec("cmd /c Dir """ & FolderPath & "*.xl??"" /b").StdOut.ReadAll, vbCrLf)
Set wbDst = Workbooks.Add(xlWBATWorksheet)
For j = LBound(FilesInFolder) To UBound(FilesInFolder)
If Len(FilesInFolder(j)) > 4 Then
With GetObject(FolderPath & FilesInFolder(j))
.Worksheets(1).Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count)
ActiveSheet.Name = "wb_" & j 'change copied sheet name to workbook's index number in array. you may wish to change this naming structure.
.Close 0
End With
End If
Next
wbDst.Worksheets(1).Delete
With Application
.EnableEvents = True
.AskToUpdateLinks = True
.Calculation = calc
End With
End Sub
theresu
11-19-2015, 12:31 AM
Thanks! I able to run the script now. I had another problem as well. My filename contained special characters ( ) in Norwegian which it didn't like when it read the files. But now it works!:)
mancubus
11-19-2015, 01:21 AM
welcome.
then vba Dir function as in your first post is our friend...
Sub vbax_54318_Consolidate_WorkSheets_From_files_In_Same_Folder_v2()
Dim FolderPath As String, FilesInFolder As String
Dim j As Long, calc As Long
Dim wbDst As Workbook
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
.AskToUpdateLinks = False
calc = .Calculation
.Calculation = xlCalculationManual
End With
FolderPath = "H:\My Documents\Test\"
Set wbDst = Workbooks.Add(xlWBATWorksheet)
FilesInFolder = Dir(FolderPath & "*.xl??")
Do While FilesInFolder <> ""
Set wb = Workbooks.Open(FolderPath & FilesInFolder)
With ActiveWorkbook
.Worksheets(1).Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count)
ActiveSheet.Name = "wb_" & j
.Close 0
End With
j = j + 1
FilesInFolder = Dir()
Loop
wbDst.Worksheets(1).Delete
With Application
.EnableEvents = True
.AskToUpdateLinks = True
.Calculation = calc
End With
End Sub
mancubus
11-19-2015, 01:37 AM
you can use v1 via a UDF
Sub vbax_54318_Consolidate_WorkSheets_From_files_In_Same_Folder_v1()
Dim FolderPath As String, tempStr As String
Dim FilesInFolder
Dim j As Long, calc As Long
Dim wbDst As Workbook
With Application
.ScreenUpdating = False
.DisplayAlerts = False
.EnableEvents = False
.AskToUpdateLinks = False
calc = .Calculation
.Calculation = xlCalculationManual
End With
FolderPath = "H:\My Documents\Test\"
FilesInFolder = Split(CreateObject("WScript.Shell").Exec("cmd /c Dir """ & FolderPath & "*.xl??"" /b").StdOut.ReadAll, vbCrLf)
Set wbDst = Workbooks.Add(xlWBATWorksheet)
For j = LBound(FilesInFolder) To UBound(FilesInFolder)
If Len(FilesInFolder(j)) > 4 Then
tempStr = FilesInFolder(j)
tempStr = StripAccentNorsk(tempStr)
FilesInFolder(j) = tempStr
With GetObject(FolderPath & FilesInFolder(j))
.Worksheets(1).Copy After:=wbDst.Worksheets(wbDst.Worksheets.Count)
ActiveSheet.Name = "wb_" & j
.Close 0
End With
End If
Next
wbDst.Worksheets(1).Delete
With Application
.EnableEvents = True
.AskToUpdateLinks = True
.Calculation = calc
End With
End Sub
Function StripAccentNorsk(thestring As String)
'http://www.extendoffice.com/documents/excel/707-excel-replace-accented-characters.html
Dim A As String, B As String
Dim i As Integer
Const AccChars = ""
Const RegChars = ""
For i = 1 To Len(AccChars)
A = Mid(AccChars, i, 1)
B = Mid(RegChars, i, 1)
thestring = Replace(thestring, A, B)
Next
StripAccentNorsk = thestring
End Function
theresu
11-19-2015, 05:27 AM
Thanks a lot Mangubus. That solved the problem With my Norwegian characters.
mancubus
11-19-2015, 06:08 AM
you are welcome.
mark the thread as solved from thread tools pls.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.