รวมชีทจากแต่ละไฟล์ที่อยู่ในแต่ละ Subfolder
Posted: Thu Dec 01, 2022 8:50 am
ต้องการรวมข้อมูลจากแต่ละชีทจาก D:/แยกรายภาค/ภาค 1, D:/แยกรายภาค/ภาค 2 จากทุก Subfolder มาต่อกันให้เป็นแต่ละไฟล์ใน
D:/สรุปภาค/ ตามตัวอย่างในไฟล์แนบครับ ไม่ทราบว่าควรปรับ Code อย่างไร Code อยู่ใน Module 1 ครับ
D:/สรุปภาค/ ตามตัวอย่างในไฟล์แนบครับ ไม่ทราบว่าควรปรับ Code อย่างไร Code อยู่ใน Module 1 ครับ
Code: Select all
Sub loopAllSubFolderSelectStartDirectory()
Call LoopAllSubFolders("D:\แยกรายภาค\")
End Sub
Sub LoopAllSubFolders(ByVal folderPath As String)
Dim fileName As String
Dim fullFilePath As String
Dim numFolders As Long
Dim folders() As String
Dim i As Long
Dim strThisOne As String
Dim strFile As String
Dim wbk As Workbook
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
fileName = Dir(folderPath & "*.*", vbDirectory)
While Len(fileName) <> 0
If Left(fileName, 1) <> "." Then
fullFilePath = folderPath & fileName
If (GetAttr(fullFilePath) And vbDirectory) = vbDirectory Then
ReDim Preserve folders(0 To numFolders) As String
folders(numFolders) = fullFilePath
numFolders = numFolders + 1
Else
Set Wkb = Workbooks.Open(fileName:=folderPath & fileName)
ActiveWorkbook.ActiveSheet.Copy After:=Workbooks("รวม.xlsm").Sheets(Workbooks("รวม.xlsm").Sheets.Count)
ActiveWorkbook.Close
End If
End If
fileName = Dir()
Wend
For i = 0 To numFolders - 1
LoopAllSubFolders folders(i)
Next i
Call SaveMyWorkbook
Call Delete_Sheets
End Sub
Sub SaveMyWorkbook()
Dim strThisOne As String
Dim str As String
Dim str1 As String
Dim str2 As String
Dim strFile As String
Dim wbk As Workbook
Dim Name As String
Set wbk = ActiveWorkbook
strThisOne = wbk.FullName
Name = ActiveSheet.Name
str = Right(Name, Len(Name) - InStr(Name, "ภาค") + 1)
strFile = "D:\แยกรายภาค\" & str & ".xlsx"
Application.DisplayAlerts = False
wbk.Save
wbk.SaveAs fileName:=strFile, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
'Workbooks.Open strThisOne
Call Delete_Sheets
End Sub
Sub Delete_Sheets()
Dim i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For i = Worksheets.Count To 2 Step -1
Worksheets(i).Delete
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub