🤗 snasui.com ยินดีต้อนรับ 🤗
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย 👍

💥 โปรดทราบ 💥
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ 👉🏾 สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ 👆🏾
    3. การ Login ผ่าน Facebook ดูวิธีที่ 👉🏾 Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ 👉🏾 Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ 👉🏾 ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ 👉🏾 ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ 👉🏾 วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ 👉🏾 จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ 👉🏾 กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
10idlnw
Member
Member
Posts: 65
Joined: Sat Apr 30, 2022 12:17 am
Excel Ver: 2019

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

#1

Post 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) เป็นต้น ผมอยากทำความเข้าใจเรื่องพวกนี้ว่า จะรุ้ได้ไงว่าสถานการณ์ไหนควรใช้วิธีไหนได้บ้างนี่ ต้องศึกษายังไงครับ บางทีอยากเข้าใจแก่น หัวใจของมันให้มากๆ จำเป็นไหมครับ แล้วผมควรเริ่มแบบไหนครับ หรือฝึกทำตามตัวอย่างแบบนี้ไปเรื่อยๆ เดี๋ยวก็จำได้เอง .. รึเปล่าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 29424
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

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

#2

Post 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 ครับ
10idlnw
Member
Member
Posts: 65
Joined: Sat Apr 30, 2022 12:17 am
Excel Ver: 2019

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

#3

Post by 10idlnw »

ขอบพระคุณมากครับอาจารย์
Post Reply