Page 1 of 1

ขอคำชี้แนะการศึกษา VBA ให้ถึงแก่น ผมควรเริ่มแบบไหนดีครับ

Posted: Mon Jun 20, 2022 11:13 pm
by 10idlnw
ที่ผมอยากศึกษาถึงแก่นเพราะ บางทีไปเจอตัวอย่างหลายๆตัวอย่างก็สงสัยครับว่า ทำไมเค้าเลือกใช้วิธีนั้น วิธีนี้ เช่น
vba เวลาก๊อปปี้ไฟล์

Code: Select all

FileCopy SourceFile, DestinationFile 
กับก๊อปปี้แบบ

Code: Select all

FileSystemObject.CopyFile "SourceFile", "DestinationFile "
ดูเหมือนแบบที่สองจะยาวกว่าและดูเหมือนยุ่งยากกว่า อยากรู้ว่ามันต่างกันยังไงครับ

อีกตัวอย่างเช่นหาไฟล์ทั้งหมดในโฟลเดอร์ บางทีแค่ใช้ dir(folder) ก็ได้ แต่บางที่ ต้องประกาศตัวแปร FSO CreateObject ต้อง CreateObject("Scripting.FileSystemObject") หรือเวลาจะดึงชื่อ ผมลองแค่ thisworkbook.fullname ก็ได้แล้ว แต่บางที่ต้องใช้ CreateObject("Scripting.FileSystemObject").getFilename(filename) เป็นต้น ผมอยากทำความเข้าใจเรื่องพวกนี้ว่า จะรุ้ได้ไงว่าสถานการณ์ไหนควรใช้วิธีไหนได้บ้างนี่ ต้องศึกษายังไงครับ บางทีอยากเข้าใจแก่น หัวใจของมันให้มากๆ จำเป็นไหมครับ แล้วผมควรเริ่มแบบไหนครับ หรือฝึกทำตามตัวอย่างแบบนี้ไปเรื่อยๆ เดี๋ยวก็จำได้เอง .. รึเปล่าครับ

Re: ขอคำชี้แนะการศึกษา VBA ให้ถึงแก่น ผมควรเริ่มแบบไหนดีครับ

Posted: Mon Jun 20, 2022 11:27 pm
by snasui
10idlnw wrote: Mon Jun 20, 2022 11:13 pm vba เวลาก๊อปปี้ไฟล์

Code: Select all

FileCopy SourceFile, DestinationFile 
กับก๊อปปี้แบบ

Code: Select all

FileSystemObject.CopyFile "SourceFile", "DestinationFile "
ดูเหมือนแบบที่สองจะยาวกว่าและดูเหมือนยุ่งยากกว่า อยากรู้ว่ามันต่างกันยังไงครับ
:D คำสั่งแรกเป็นคำสั่งของ VBA โดยตรงไม่ต้องผ่าน Reference ส่วนคำสั่งที่สองเป็นของ Reference ที่ชื่อว่า FileSystemObject ที่จะต้องสร้าง Object ของมันขึ้นมาก่อนด้วยฟังก์ชัน CreateObejct ถึงจะใช้ฟังก์ชันของมันได้ การใช้งานแบบที่เขียนมาถามนี้เรียกว่า Late binding หากเป็น Early binding จะต้องไป Add Reference เข้ามาก่อนผ่านเมนู Tools > References เช่นนี้เป็นต้น
10idlnw wrote: Mon Jun 20, 2022 11:13 pm อีกตัวอย่างเช่นหาไฟล์ทั้งหมดในโฟลเดอร์ บางทีแค่ใช้ dir(folder) ก็ได้ แต่บางที่ ต้องประกาศตัวแปร

Code: Select all

FSO CreateObject
ต้อง

Code: Select all

CreateObject("Scripting.FileSystemObject") 
หรือเวลาจะดึงชื่อ ผมลองแค่

Code: Select all

thisworkbook.fullname
ก็ได้แล้ว แต่บางที่ต้องใช้

Code: Select all

CreateObject("Scripting.FileSystemObject").getFilename(filename)
การใช้งานสิ่งเหล่านี้ขึ้นอยู่กับเป้าหมายที่ต้องการว่าต้องการ Property ตัวไหน หากเป็นแค่ Path, ชื่อไฟล์ ไม่จำเป็นต้องไปใช้ FileSystemObject เข้ามาช่วยเพราะจะยุ่งยากกว่า แต่หากต้องการเวลาของการ Create, Update ไฟล์ จึงควรใช้ FileSystemObject ครับ
10idlnw wrote: Mon Jun 20, 2022 11:13 pm ผมอยากทำความเข้าใจเรื่องพวกนี้ว่า จะรุ้ได้ไงว่าสถานการณ์ไหนควรใช้วิธีไหนได้บ้างนี่ ต้องศึกษายังไงครับ บางทีอยากเข้าใจแก่น หัวใจของมันให้มากๆ จำเป็นไหมครับ แล้วผมควรเริ่มแบบไหนครับ หรือฝึกทำตามตัวอย่างแบบนี้ไปเรื่อยๆ เดี๋ยวก็จำได้เอง .. รึเปล่าครับ
สิ่งเหล่านี้ต้องผ่านการใช้งานมาสักระยะทั้งมีงานที่จำเป็นต้องใช้ข้อมูลเฉพาะเรื่องแล้วจะทราบว่าสิ่งที่ Excel มีให้มานั้นเพียงพอกับการใช้งานหรือไม่ และเมื่อไม่มีจึงจะไปพึ่งพาพวก Reference ต่าง ๆ เข้ามาช่วย แม้แต่การใช้งาน Word หรือ Outlook หากจะให้สะดวกในการใช้งานก็ควรเลือก Add Reference เข้ามาก่อน เพราะการทำเช่นนี้เมื่อเขียนอ้างอิงถึง Property และ Method ต่าง ๆ จะมี Intellisence เข้ามาช่วยให้เขียนได้ง่ายกว่าการ Create Object ครับ

Re: ขอคำชี้แนะการศึกษา VBA ให้ถึงแก่น ผมควรเริ่มแบบไหนดีครับ

Posted: Mon Jun 20, 2022 11:31 pm
by 10idlnw
ขอบพระคุณมากครับอาจารย์