Beste lezer,
Ik heb 40 losse Excelbestanden met elk 4 tabbladen. Hiervan wil ik 1 groot Excelbestand maken met vier tabbladen. Handmatig 40 keer kopieren en plakken in een nieuw tabblad (en dat voor elk van de 4 tabbladen) is nogal tijdrovend. Ik heb op Internet een VBA-script gevonden dat het perfect doet voor tabblad 1 van elk van de bestanden. Deze worden keurig samengevoegd in 1 nieuw tabblad. Echter nu wil ik hetzelfde doen voor tabbladen 2, 3 en 4. Helaas schiet mijn kennis van VBA tekort om het script zodanig aanpassen dat hij van elk bestand niet de eerste maar de tweede (of derde of vierde) tabbladen samenvoegt. Het is waarschijnlijk een kleine aanpassing aan het script maar ik weet niet waar. Heeft iemand een suggestie?
Hieronder het gevonden VBA-script (ik sta overigens open voor alternatieve oplossingen mocht iemand een beter idee hebben):
Sub MergeFiles()
Dim path As String, ThisWB As String, lngFilecounter As Long
Dim wbDest As Workbook, shtDest As Worksheet, ws As Worksheet
Dim Filename As String, Wkb As Workbook
Dim CopyRng As Range, Dest As Range
Dim RowofCopySheet As Integer
RowofCopySheet = 1 ' Row to start on in the sheets you are copying from
ThisWB = ActiveWorkbook.Name
path = ("H:\Belangrijk\Test\Samenvoegen\Bestanden")
Application.EnableEvents = False
Application.ScreenUpdating = False
Set shtDest = ActiveWorkbook.Sheets("Blad1")
Filename = Dir(path & "\*.xls", vbNormal)
If Len(Filename) = 0 Then Exit Sub
Do Until Filename = vbNullString
If Not Filename = ThisWB Then
Set Wkb = Workbooks.Open(Filename:=path & "\" & Filename)
Set CopyRng = Wkb.Sheets(1).Range(Cells(RowofCopySheet, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
Set Dest = shtDest.Range("A" & shtDest.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
CopyRng.Copy
Sheets("Data").Select
Dest.PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False 'Clear Clipboard
Wkb.Close False
End If
Filename = Dir()
Loop
Range("A1").Select
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox "Done!"
End Sub
Ik heb 40 losse Excelbestanden met elk 4 tabbladen. Hiervan wil ik 1 groot Excelbestand maken met vier tabbladen. Handmatig 40 keer kopieren en plakken in een nieuw tabblad (en dat voor elk van de 4 tabbladen) is nogal tijdrovend. Ik heb op Internet een VBA-script gevonden dat het perfect doet voor tabblad 1 van elk van de bestanden. Deze worden keurig samengevoegd in 1 nieuw tabblad. Echter nu wil ik hetzelfde doen voor tabbladen 2, 3 en 4. Helaas schiet mijn kennis van VBA tekort om het script zodanig aanpassen dat hij van elk bestand niet de eerste maar de tweede (of derde of vierde) tabbladen samenvoegt. Het is waarschijnlijk een kleine aanpassing aan het script maar ik weet niet waar. Heeft iemand een suggestie?
Hieronder het gevonden VBA-script (ik sta overigens open voor alternatieve oplossingen mocht iemand een beter idee hebben):
Sub MergeFiles()
Dim path As String, ThisWB As String, lngFilecounter As Long
Dim wbDest As Workbook, shtDest As Worksheet, ws As Worksheet
Dim Filename As String, Wkb As Workbook
Dim CopyRng As Range, Dest As Range
Dim RowofCopySheet As Integer
RowofCopySheet = 1 ' Row to start on in the sheets you are copying from
ThisWB = ActiveWorkbook.Name
path = ("H:\Belangrijk\Test\Samenvoegen\Bestanden")
Application.EnableEvents = False
Application.ScreenUpdating = False
Set shtDest = ActiveWorkbook.Sheets("Blad1")
Filename = Dir(path & "\*.xls", vbNormal)
If Len(Filename) = 0 Then Exit Sub
Do Until Filename = vbNullString
If Not Filename = ThisWB Then
Set Wkb = Workbooks.Open(Filename:=path & "\" & Filename)
Set CopyRng = Wkb.Sheets(1).Range(Cells(RowofCopySheet, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column))
Set Dest = shtDest.Range("A" & shtDest.UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1)
CopyRng.Copy
Sheets("Data").Select
Dest.PasteSpecial xlPasteValuesAndNumberFormats
Application.CutCopyMode = False 'Clear Clipboard
Wkb.Close False
End If
Filename = Dir()
Loop
Range("A1").Select
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox "Done!"
End Sub