snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
lnongkungl
Member
Posts: 92 Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013
#1
Post
by lnongkungl » Wed Dec 27, 2017 4:55 pm
คือผมต้องการค้นหาไฟล์ที่อยู่ในโฟลเดอร์ รับเข้า ครับ แต่ถ้าไม่เจอก็สร้างไฟล์ใหม่ตามชื่อที่กำหนดครับ
แต่พอลองรันดู มันไม่เกิดอะไรขึ้นเลย รบกวนอาจารย์เช็คโค๊ดให้ทีครับว่าต้องแก้ไขตรงไหน มันไม่ error หรือ อะไรเลย ผมเลย งง
Code: Select all
Public Sub find()
Dim fname As String
fname = Format(Now(), "yyyy")
Dim fpath As String
fpath = ActiveWorkbook.Path & "\รับเข้า"
If fname = "" Then
Workbook.Add Filename:=fpath & "\" & fname
End If
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Wed Dec 27, 2017 5:03 pm
แนบไฟล์ตัวอย่างที่เขียน Code นี้ไว้แล้วมาด้วยจะได้สะดวกในการทดสอบและแนะนำครับ
lnongkungl
Member
Posts: 92 Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013
#3
Post
by lnongkungl » Thu Dec 28, 2017 1:17 pm
ไฟล์ครับ ผมเอารวมไปไว้ในปุ่ม save เลยครับ แต่ code save ผมยังไม่ได้เช็ค error เอาแค่ code ตรวจสอบไฟล์ก่อนครับ
Attachments
savefileเดิม.xlsm
(19.28 KiB) Downloaded 32 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Thu Dec 28, 2017 4:14 pm
ตัวอย่าง Code ตามด้านล่างครับ
Code: Select all
Dim fname As String
Dim fpath As String
fname = Format(Now(), "yyyy")
fpath = Dir(ActiveWorkbook.Path & "\ÃѺà¢éÒ\" & fname & ".xlsx")
Application.DisplayAlerts = False
If fpath = "" Then
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path & _
"\" & fname & ".xlsx", FileFormat:=xlOpenXMLWorkbook
End If
Application.DisplayAlerts = True
lnongkungl
Member
Posts: 92 Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013
#5
Post
by lnongkungl » Fri Dec 29, 2017 9:20 am
ขอบคุณครับ อาจารย์ ผมอาจจะอธิบายไม่ค่อยเข้าใจ มันเลยยังไม่ตรงกับ concept เท่าไรครับ เด๋วผมลองเอาไปปรับดูก่อนครับ ติดตรงไหนแล้วเดี๋ยวมาถามอีกทีครับ
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Fri Dec 29, 2017 9:50 pm
lnongkungl wrote: ขอบคุณครับ อาจารย์ ผมอาจจะอธิบายไม่ค่อยเข้าใจ มันเลยยังไม่ตรงกับ concept เท่าไรครับ เด๋ว ผมลองเอาไปปรับดูก่อนครับ ติดตรงไหนแล้วเดี๋ยวมาถามอีกทีครับ
คำว่า "เด๋ว" ผิดกฎการใช้บอร์ด ขอให้งดใช้ภาษาแชทเนื่องจากมีผู้เข้ามาศึกษาจากหลายประเทศ การแปลหน้าเว็บอาจจะทำให้ความหมายผิดไปจากที่ควรจะเป็นครับ
lnongkungl
Member
Posts: 92 Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013
#7
Post
by lnongkungl » Wed Jan 03, 2018 8:52 am
ขออภัยครับ รีบพิมพ์ไปหน่อย
OOjaoQQ
Member
Posts: 36 Joined: Sun Mar 11, 2018 11:44 am
#8
Post
by OOjaoQQ » Fri Jun 15, 2018 2:27 pm
อาจารย์ช่วยดู code ที่ผมเขียนหน่อยครับ มันติดดีบักครั้งแรก แล้วค่อยทำงานได้ครับ
กรอก พ.ศ. ในช่อง B2 ครับ ถ้าเจอไฟล์ จะเปิดไฟล์ ถ้าไม่เจอ จะเปิด Filebase แล้ว save as ตามชื่อ ที่ค้นหาครับ
มันเหมือนไม่สมบูรณ์ครับ ถ้าอาจารย์เห็นว่าตรงไหน ควรเพิ่ม หรือ แก้ กรุณาแนะนำด้วยนะครับ ขอบคุณครับ
Private Sub cmbSearch_Click()
Dim FilePath As String ' ¡Ó˹´ µÑÇá»Ã ª×èÍ Path ·Õèà¡çºä¿Åì
Dim fileName As Variant ' ¡Ó˹´ µÑÇá»Ã ª×èÍä¿Åì
Dim fileNameBase As Variant ' ¡Ó˹´ µÑÇá»Ã ª×èÍä¿Åìµé¹©ºÑº
Dim fileNameSearch As Variant ' ¡Ó˹´ µÑÇá»Ã ª×èÍä¿Åì·Õè¤é¹ËÒ
Dim strmsgbox As String ' ¡Ó˹´ µÑÇá»Ã msgbox
fileNameSearch = Sheet1.Range("B2").Value ' ´Ö§ª×èÍä¿Åì·Õè¤é¹ËÒÁÒà¡çºã¹µÑÇá»Ã
FilePath = "D:\Data" ' ·Õèà¡çºä¿Åì
fileName = Dir(FilePath & "\*.xlsm") ' ä¿Åìáá
fileNameBase = Dir(FilePath & "\*.xlsm") ' ä¿Åìµé¹©ºÑº ª×èÍ
' ==== µÃǨÊͺÇèÒÁÕä¿ÃìËÃ×ÍäÁè
Do Until fileName = "" ' µÃǨÊͺä¿Å·ÕÅÐä¿Åì
If fileName = Trim(fileNameSearch & ".xlsm") Then ' ¶éÒà¨Íä¿Åì·Õè¤é¹ËÒ
Workbooks.Open (fileNameSearch & ".xlsm")
Exit Sub ' ¨º¡Ò÷ӧҹ
fileName = Dir() ' àÅ×è͹ä¿Åì¶Ñ´ä»
End If
fileName = Dir() ' àÅ×è͹ä¿Åì¶Ñ´ä»
Loop
' ==== ¶éÒäÁèãËéÊÃéÒ§ä¿ÃìãËÁè
'Workbooks.Open (fileNameBase) 'à»Ô´ - ä¿Åìµé¹©ºÑº
Dim MyFile As Variant
MyFile = Dir(FilePath & "\Filebase.xlsm")
Workbooks.Open (MyFile)
'Workbooks.Open (fileNameBase)
Dim fileSaveName As Variant
ActiveWorkbook.SaveAs fileName:=fileNameSearch ' Save ä¿Åìµé¹©ºÑº µÒÁª×èÍ ·Õè¤é¹ËÒ
ActiveWorkbook.Close '»Ô´ä¿Åì
strmsgbox = msgbox(fileNameSearch & " ¶Ù¡ÊÃéÒ§àÃÕºÃéÍÂáÅéÇ...¤ÃѺ!!", , "á¨é§àµ×͹")
End Sub
Attachments
Filebase.xlsm
(11.18 KiB) Downloaded 20 times
Test seach.xlsm
(21.56 KiB) Downloaded 21 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#9
Post
by snasui » Fri Jun 15, 2018 6:49 pm
กรุณาโพสต์ Code ให้แสดงเป็น Code ดูตัวอย่างในกฎการใช้บอร์ดข้อ 5 ด้านบน จะได้สะดวกในการอ่านและคัดลอกไปทดสอบครับ
หากมีภาษาไทยใน Code ให้สลับคีย์บอร์ดเป็นภาษาไทยก่อนแล้วค่อยคัดลอกมาวางในช่องความเห็น
กรณีเป็นคำถามที่ไม่เกี่ยวข้องกับกระทู้เดิมให้ตั้งกระทู้ขึ้นมาใหม่ครับ
OOjaoQQ
Member
Posts: 36 Joined: Sun Mar 11, 2018 11:44 am
#10
Post
by OOjaoQQ » Fri Jun 15, 2018 11:38 pm
ขอโทษครับ อาจารย์ช่วยดู code ที่ผมเขียนหน่อยครับ มันติดดีบักครั้งแรก แล้วค่อยทำงานได้ครับ
กรอก พ.ศ. ในช่อง B2 ครับ ถ้าเจอไฟล์ จะเปิดไฟล์ ถ้าไม่เจอ จะเปิด Filebase แล้ว save as ตามชื่อ ที่ค้นหาครับ
มันเหมือนไม่สมบูรณ์ครับ ถ้าอาจารย์เห็นว่าตรงไหน ควรเพิ่ม หรือ แก้ กรุณาแนะนำด้วยนะครับ ขอบคุณครับ
Private Sub cmbSearch_Click()
Dim FilePath As String
Dim fileName As Variant
Dim fileNameBase As Variant
Dim fileNameSearch As Variant
Dim strmsgbox As String
fileNameSearch = Sheet1.Range("B2").Value
FilePath = "D:\Data"
fileName = Dir(FilePath & "\*.xlsm")
fileNameBase = Dir(FilePath & "\*.xlsm")
Do Until fileName = ""
If fileName = Trim(fileNameSearch & ".xlsm") Then
Workbooks.Open (fileNameSearch & ".xlsm")
Exit Sub
fileName = Dir()
End If
fileName = Dir()
Loop
Dim MyFile As Variant
MyFile = Dir(FilePath & "\Filebase.xlsm")
Workbooks.Open (MyFile)
Dim fileSaveName As Variant
ActiveWorkbook.SaveAs fileName:=fileNameSearch
ActiveWorkbook.Close
strmsgbox = msgbox(fileNameSearch & " ถูกสร้างเรียบร้อยแล้ว...ครับ!!", , "แจ้งเตือน")
End Sub
Attachments
Test seach.xlsm
(19.14 KiB) Downloaded 19 times
Filebase.xlsm
(10.92 KiB) Downloaded 19 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#11
Post
by snasui » Fri Jun 15, 2018 11:50 pm
โพสต์ Code ให้เแสดงเป็น Code ด้วย ทบทวนสิ่งที่ผมแจ้งไปตามโพสต์ #9 อีกครั้งครับ
OOjaoQQ
Member
Posts: 36 Joined: Sun Mar 11, 2018 11:44 am
#12
Post
by OOjaoQQ » Sat Jun 16, 2018 12:06 am
อีกครั้งครับ ขอโทษครับ อาจารย์ช่วยดู code ที่ผมเขียนหน่อยครับ มันติดดีบักครั้งแรก แล้วค่อยทำงานได้ครับ
กรอก พ.ศ. ในช่อง B2 ครับ ถ้าเจอไฟล์ จะเปิดไฟล์ ถ้าไม่เจอ จะเปิด Filebase แล้ว save as ตามชื่อ ที่ค้นหาครับ
มันเหมือนไม่สมบูรณ์ครับ ถ้าอาจารย์เห็นว่าตรงไหน ควรเพิ่ม หรือ แก้ กรุณาแนะนำด้วยนะครับ ขอบคุณครับ
Code: Select all
Private Sub cmbSearch_Click()
Dim FilePath As String
Dim fileName As Variant
Dim fileNameBase As Variant
Dim fileNameSearch As Variant
Dim strmsgbox As String
fileNameSearch = Sheet1.Range("B2").Value
FilePath = "D:\Data"
fileName = Dir(FilePath & "\*.xlsm")
fileNameBase = Dir(FilePath & "\*.xlsm")
Do Until fileName = ""
If fileName = Trim(fileNameSearch & ".xlsm") Then
Workbooks.Open (fileNameSearch & ".xlsm")
Exit Sub
fileName = Dir()
End If
fileName = Dir()
Loop
Dim MyFile As Variant
MyFile = Dir(FilePath & "\Filebase.xlsm")
Workbooks.Open (MyFile)
Dim fileSaveName As Variant
ActiveWorkbook.SaveAs fileName:=fileNameSearch
ActiveWorkbook.Close
strmsgbox = msgbox(fileNameSearch & " ถูกสร้างเรียบร้อยแล้ว...ครับ!!", , "แจ้งเตือน")
Attachments
Test seach.xlsm
(19.14 KiB) Downloaded 31 times
Filebase.xlsm
(10.92 KiB) Downloaded 26 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#13
Post
by snasui » Sat Jun 16, 2018 5:38 am
ปรับ Code การเปิดไฟล์ใหม่เป็นด้านล่างครับ
Workbooks.Open (FilePath & "\" & MyFile)
OOjaoQQ
Member
Posts: 36 Joined: Sun Mar 11, 2018 11:44 am
#14
Post
by OOjaoQQ » Sat Jun 16, 2018 10:24 am
อาจารย์ครับ พอแก้ Code ตามที่อาจารย์ แนะนำ Code ที่ search file ไม่ทำงานครับ
1.jpg (32.05 KiB) Viewed 396 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#15
Post
by snasui » Sat Jun 16, 2018 10:31 am
ถ้าทำงานมันจะให้ผลเป็นอย่างไรครับ
ภาพการฟ้องที่แนบมาหมายถึงไฟล์นั้นมีอยู่แล้ว หากต้องการ Save ทับไฟล์เดิมให้คลิก Yes ครับ
OOjaoQQ
Member
Posts: 36 Joined: Sun Mar 11, 2018 11:44 am
#16
Post
by OOjaoQQ » Sat Jun 16, 2018 10:37 am
ถ้าเจอไฟล์ ให้เปิดไฟล์ ถ้าไม่เจอ ให้เปิด file base แล้ว save ตามชื่อที่ค้นหาครับ
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#17
Post
by snasui » Sat Jun 16, 2018 10:42 am
Code นั้นมันก็ทำเช่นอธิบายมาครับ
มันไม่เจอ Filebase.xlsm มันจึงไม่เปิด และมันจะ Save ไฟล์ปัจจุบันเป็นตามชื่อที่กำหนดในเซลล์ B2 แต่พบว่ามีไฟล์ชื่อนั้นอยู่แล้วจึงฟ้องขึ้นมา ลองทบทวนสิ่งที่ผมอธิบายไปว่าตรงตามนั้นหรือไม่
สิ่งสำคัญอย่างหนึ่งสำหรับการใช้ Code คือการตรวจสอบการทำงานของ Code ที่ละบรรทัดได้ด้วยการ Debug วิธีการคือ คลิกลงไปใน Code นั้นแล้วกดแป้น F8 ซ้ำ ๆ ลองตรวจสอบดูว่าผิดพลาดในบรรทัดไหน ขั้นตอนไหน ช่วยแจ้งบรรทัดนั้น ขั้นตอนนั้นมาครับ
OOjaoQQ
Member
Posts: 36 Joined: Sun Mar 11, 2018 11:44 am
#18
Post
by OOjaoQQ » Sat Jun 16, 2018 10:54 am
บรรทัดนี้ครับ ที่ผมเขียนแล้วมันไม่ทำงาน ถ้าเจอไฟล์ต้องเปิดไฟล์ อาจารย์กรุณาแนะนำด้วยครับ ต้องปรับ code อย่างไร
2.jpg (46.64 KiB) Viewed 387 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#19
Post
by snasui » Sat Jun 16, 2018 11:08 am
Code บรรทัดนั้นหมายถึง หากมีไฟล์ในเซลล์ B2 ให้เปิดขึ้นมา หากไม่เปิดขึ้นมาแสดงว่าไม่มีชื่อไฟล์ในเซลล์ B2 ใน Path ที่กำหนดใน Code ครับ
ให้ตรวจสอบว่ามีไฟล์ชื่อเดียวกับค่าในเซลล์ B2 ใน Path ที่ให้ไว้ใน Code หรือไม่ หากมีจะต้องเปิดขึ้นมา ในเครื่องผมสามารถทำงานได้ปกติครับ