Page 1 of 1

เปลี่ยนโค้ดให้ไดนามิคตามชื่อไฟล์ในชี้ต

Posted: Tue May 27, 2014 9:07 am
by godman
สวัสดีครับ
ผมมีโค้ดที่ใช้งานอยู่นานพอสมควรแล้ว เป็นโค้ดสำหรับดึงข้อมูลไฟล์โดยรักษารูปแบบ ก็คือ copy นั้นแหละครับ แต่ปัญหาคือมันดึงมาทุกไฟล์ใน folder ที่ตายตัวตามโค้ด ผมอยากแก้ไขโค้ดแต่ไม่รู้จะแก้อย่างไร ให้มันเปลี่ยนตามที่เราต้องการว่าจะเอาไฟลใหน folder ใหน โค้ดนี่ครับ
อยากเปลี่ยนโค้ดตรง path = และ filename = ให้มันตามความต้องการของเราในชี้ตตามไฟล์แนบนะครับ

Code: Select all

Sub GetSheets()
Path = "D:\BOMfor\"
Filename = Dir(Path & "*.xls")
  Do While Filename <> ""
  Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
     For Each Sheet In ActiveWorkbook.Sheets
     Sheet.Copy After:=ThisWorkbook.Sheets(1)
  Next Sheet
     Workbooks(Filename).Close
     Filename = Dir()
  Loop
End Sub

Re: เปลี่ยนโค้ดให้ไดนามิคตามชื่อไฟล์ในชี้ต

Posted: Tue May 27, 2014 2:42 pm
by bank9597
:D ลองดูตัวอย่างในลิงค์นี้ดูครับ
http://www.java2s.com/Code/VBA-Excel-Ac ... efiles.htm

Re: เปลี่ยนโค้ดให้ไดนามิคตามชื่อไฟล์ในชี้ต

Posted: Tue May 27, 2014 2:46 pm
by snasui
:D อีกตัวอย่างตามด้านล่างครับ

Code: Select all

Sub GetSheets()
    Path = Sheets("list").Range("C2").Value
    Filename = Sheets("list").Range("b2").Value
    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
    For Each Sheet In ActiveWorkbook.Sheets
        Sheet.Copy After:=ThisWorkbook.Sheets(1)
    Next Sheet
    Workbooks(Filename).Close
End Sub

Re: เปลี่ยนโค้ดให้ไดนามิคตามชื่อไฟล์ในชี้ต

Posted: Tue May 27, 2014 5:01 pm
by godman
ขอบคุณครับ ผมไม่แน่ใจว่าจะผิดกฏไหม ถ้าจะบอกว่า ใช้ได้ครับ แต่มีข้อกำหนดเพิ่มเติมว่า อยากจะให้มัน copy ลงใน sheets เดียวตลอด ใช้ชื่อว่า ชี้ต report แล้วกัน คล้ายๆ กับ copy paste แบบ paste format. ครับ ผมอยากได้สีของ report ก็เลยใช้ paste value และ format ด้วย เพราะตอนนี้ดูเหมือนสิ่งที่ได้คือ ได้ชี้ต ต่อต่อกันไป ถ้าผิดกฏต้องขออภัยด้วย ถ้าผิดกฏผมจะลองไปเขียนโค้ดเพิ่มเติมตรง Sheet.copy after ครับ แต่ถ้าไม่ผิด ขอความกรุณาด้วยครับ

Re: เปลี่ยนโค้ดให้ไดนามิคตามชื่อไฟล์ในชี้ต

Posted: Tue May 27, 2014 8:05 pm
by snasui
:D ให้ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ

Re: เปลี่ยนโค้ดให้ไดนามิคตามชื่อไฟล์ในชี้ต

Posted: Tue May 27, 2014 10:04 pm
by godman
ผมได้ใส่ with มาครับ แต่ยังไม่ได้ตามต้องการ ไม่แน่ใจว่าการกำหนดให้ข้อมูลวางใน sheet report เสมอ ใช้ with this sheet ได้หรือไม่

Code: Select all

Sub GetSheets()
    Path = Sheets("list").Range("C2").Value
    Filename = Sheets("list").Range("b2").Value
    With ThisWorkbook.Worksheets("REPORT")
    Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
    For Each Sheet In ActiveWorkbook.Sheets
        Sheet.Copy After:=ThisWorkbook.Sheets(1)
    Next Sheet
    Workbooks(Filename).Close
    End With
End Sub

Re: เปลี่ยนโค้ดให้ไดนามิคตามชื่อไฟล์ในชี้ต

Posted: Tue May 27, 2014 10:09 pm
by snasui
:D With...End With ไม่ใช่ Code หลักสำหรับสิ่งที่คุณต้องการจะทำครับ

หากผมเข้าใจถูกต้อง คุณกำลังนำข้อมูลจากทุกชีทในไฟล์ที่กำหนดมาวางต่อกันในชีทใดชีทหนึ่ง คุณจะต้องเขียน Code เหล่านั้นมาก่อน ไม่ใช่แค่ใส่ With...End With ครับ