เรียน อ.snasui
ผมลองเขียนคำสั่ง VBA ตาม Clip ที่อาจารย์แนะนำมาปรากฏว่าไม่สามารถดึงชื่อไฟล์จาก SubFolder มาได้ ผมจึงใช้คำสั่งที่ผมเคยเขียนได้ดึงชื่อไฟล์ในแต่ละ SubFolder แทนครับ
แต่ทั้งนี้ผมลองใช้คำสั่งในการ CollectData ตามที่อาจารย์แนะนำ ปรากฏว่ามันขึ้น Debug ผมไม่แน่ใจว่าผิดพลาดประการใด
รบกวนอาจารย์ช่วยแนะนำด้วยครับ
คำสั่งที่ใช้ได้ครับ
Code: Select all
Sub ListFileInFolder()
Directory = "D:\Anamai\SystemTest\TestForm\*.xlsx"
r = 2
ListFile = Dir(Directory, vbNormal)
Do While ListFile <> ""
r = r + 1
Cells(r, 2) = ListFile
ListFile = Dir()
Loop
End Sub
คำสั่งในการ Collectdata ติด debug ตรง Set wb = Workbook.Open(strPath(i)) ครับ
** ไฟล์ข้อมูลทั้งหมดต้องอยู่ใน Folder เดียวกันหรือไม่ครับ **
Code: Select all
Sub Colletcdata()
Dim myFolder As String, mySubFolder As String
Dim wb As Workbook, s As Worksheet, db As Worksheet
Dim strPath As Variant, i As Integer, f As Byte
myFolder = "D:\Anamai\TestVBA\DataTest"
mySubFolder = Dir(myFolder & "*", vbDirectory)
strPath = Application.GetOpenFilename(FileFilter:="Excel File(*.xls*),*.xls*", _
MultiSelect:=True)
If TypeName(strPath) = "Boolean" Then Exit Sub
Set db = ThisWorkbook.Sheets(1)
db.UsedRange.ClearContents
Application.ScreenUpdating = False
For i = 1 To UBound(strPath)
Set wb = Workbook.Open(strPath(i))
For Each s In wb.Worksheets
f = IIf(db.Range("a1").Value = "", 0, 1)
If s.Range("a1").Value <> "" Then
s.UsedRange.Offset(f, 0).Copy
With db
.Range("a" & .Rows.Count).End(xlUp).Offset(f, 0) _
.PasteSpecial xlPasteValues
End With
End If
Next s
wb.Close False
Application.CutCopyMode = False
Next i
Apllication.ScreenUpdating = True
MsgBox "Finished.", vbInformation
End Sub