Page 1 of 1

VBA Getsheet ต้องการให้ชื่อชีทเปลี่ยนไปตามชื่อไฟล์ที่ดึงมา

Posted: Wed Nov 02, 2016 11:53 am
by p_d
สวัสดีค่ะอาจารย์
ตอนนี้ดิฉันมีไฟล์ที่ต้องดึงมาเพื่อรันมาโคร แต่พอใช้คำสั่ง Getsheet มาแล้วปรากฎว่าชื่อชีทจะเป็น Sheet(1),Sheet(2),... แบบนี้ต่อกันไป (เพิ่ม 12 ไฟล์ต่อครั้ง)
ถ้าดิฉันอยากให้ชื่อชีทตรงกับชื่อไฟล์ที่ดึงมาต้องใช้คำสั่งอะไรคะ ตอนนี้มานั่งเปลี่ยนเองเสียเวลามากค่ะ ตัวอย่างไฟล์แนบค่ะ

Code: Select all

Sub GetSheets()
Path = "D:\GETMONTH\"
Filename = Dir(Path & "*.xlsx")
  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
 Application.DisplayAlerts = False
Sheet1.Delete
End Sub
ขอบคุณค่ะ
p_d

Re: VBA Getsheet ต้องการให้ชื่อชีทเปลี่ยนไปตามชื่อไฟล์ที่ดึงมา

Posted: Wed Nov 02, 2016 12:09 pm
by DhitiBank
ลองเพิ่มคำสั่งตรงลูป For ... Next ครับ

Code: Select all

For Each Sheet In ActiveWorkbook.Sheets
    Sheet.Copy After:=ThisWorkbook.Sheets(1)
    ThisWorkbook.Sheets(2).Name = Sheet.Parent.Name & " " & Sheet.Name
Next Sheet
การคัดลอกข้อมูลโดยคัดลอกชีทแบบนี้ ต้องระวังนะครับ หากสมุดงานต้นทางมี Name range อยู่ การคัดลอกแบบนี้จะทำให้เกิดข้อผิดพลาดได้ครับ

Re: VBA Getsheet ต้องการให้ชื่อชีทเปลี่ยนไปตามชื่อไฟล์ที่ดึงมา

Posted: Wed Nov 02, 2016 2:47 pm
by p_d
คุณ DhitiBank

ถ้าไม่ต้องการให้แสดง .xlsx ด้วยทำได้ไหมคะ

ขอบคุณค่ะ
p_d

Re: VBA Getsheet ต้องการให้ชื่อชีทเปลี่ยนไปตามชื่อไฟล์ที่ดึงมา

Posted: Wed Nov 02, 2016 7:59 pm
by snasui
:D ตัวอย่าง Code ครับ

จาก Sheet.Parent.Name ปรับเป็น Vba.Left(Sheet.Parent.Name,InstrRev(Sheet.Parent.Name,".")-1)

Re: VBA Getsheet ต้องการให้ชื่อชีทเปลี่ยนไปตามชื่อไฟล์ที่ดึงมา

Posted: Thu Nov 03, 2016 8:48 am
by p_d
เรียน อาจารย์

เยี่ยมเลยค่ะ ต่อไปไม่ต้องนั่งพิมพ์เองแล้ว ^ O ^ เสียเวลามาตั้งนาน

ขอบคุณมากค่ะ
p_d