Dear Be-Excel,
Sehubungan dengan pertanyaan dari seorang member dari negara antah berantah
mengenai hal tersebut diatas yang mirip dengan masalah yang pernah saya
sampaikan sebelumnya....saya mencoba merevisi file sebelumnya (Master) sehingga
menjadi lebih mudah.
Pertanyaannya adalah sebagai berikut (terjemahan bebas):Saya mempunyai beberapa
file dalam dua directory tapi mempunyai nama2 yang sama, mis- Dir 1, file
1,2,3- Dir 2, file 1,2,3Saya ingin mencopy isi file2 tersebut.
Pertanyaan tersebut saya coba kembangkan menjadi:"Saya ingin mengcopy isi
beberapa file yang berada dalam beberapa directory dan masing2 file mempunyai
beberapa sheet yang tidak sama.
Setelah Macronya dibuat, hanya perlu 3 langkah untuk melaksanakannya :- Buka
blank Workbook yang mempunyai peling sedikit 2 Sheet- Tulis nama2 folder atau
sub folder pada Sheet2 Range A1, dstnya (dalam contoh di atas Range A1 diisi
dengan D1 dan Range A2 diisi dengan D2)- Copas dan jalankan macro di bawah ini
pada Sheet1 (macro harus aktif),
Option Explicit
Sub ReadAndMergeData()
' ERROR CATCHING
On Error GoTo ErrHandler
' FREEZE SCREEN
Application.ScreenUpdating = False
' CLEAR ALL DATA
Cells.Clear
' OUR FILE SYSTEM OBJECTS AND VARIABLES
Dim objFs As Object
Dim objFolder As Object
Dim file As Object
Dim dst As Workbook
Dim src As Workbook
Dim wks As Worksheet
Dim i As Integer
Dim mynextrow As Integer
' THE DESTINATION WORKBOOK AND STARTED ROW
Set dst = ThisWorkbook
mynextrow = 1
' SET FILESYSTEMOBJECT
Set objFs = CreateObject("Scripting.FileSystemObject")
' LOOP THROUGH ALL THE PATHS OF THE SOURCE FOLDER
For i = 1 To WorksheetFunction.CountA(Sheet2.Columns("A:A"))
Set objFolder = objFs.GetFolder(Sheet2.Range("A" & i).Value)
' LOOP THROUGH ALL THE WORKBOOKS AND WORKSHEETS IN THE SOURCE FOLDER
For Each file In objFolder.Files
' THE SOURCE WORKBOOK
Set src = Workbooks.Open(file.Path, True, True)
For Each wks In src.Worksheets
dst.Sheets("sheet1").Cells(mynextrow, 1).Value = file & " (" &
wks.Name & ")"
dst.Sheets("sheet1").Cells(mynextrow, 1).Font.Bold = True
wks.UsedRange.Copy
dst.Sheets("sheet1").Cells(mynextrow + 1, 1).PasteSpecial
Paste:=xlPasteValues
mynextrow = dst.Sheets("sheet1").UsedRange.Rows.Count + 2
Next wks
' CLOSE SOURCE WORKBOOK AND SET TO NOTHING
src.Close False
Set src = Nothing
Next file
Next i
ErrHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Semoga bermanfaat.
Salam,HK