<< Go Back

ในการเขียนโปรแกรมคอมพิวเตอร์นั้นจะต้องมีข้อผิดพลาดเกิดขึ้นบ้าง ถ้าหากเป็นข้อผิดพลาดที่เกิดเนื่องจากการเขียนโปรแกรม เช่น เขียนโปรแกรมผิดหลักโครงสร้าง หรือเขียนคำสั่งต่างๆ ผิดตัวคอมไพเลอร์ก็จะแจ้งข้อผิดพลาดออกมาทันที ผู้เขียนโปรแกรมจะต้องแก้ไขก่อนจึงจะนำโปรแกรมไปใช้งานต่อไปได้ สำหรับข้อผิดพลาดบางประเภทอาจเกิดขึ้นระหว่างการรันโปรแกรม (Run-TimeError) ข้อผิดพลาดนี้ผู้เขียนโปรแกรมอาจละทิ้งไปได้ ไม่สนใจก็ได้ แต่ก็จะทำให้โปรแกรมทำงานไม่ถูกต้องเสมอไป ถูกบ้าง ไม่ถูกบ้าง ดังนั้นการเขียนโปรแกรมที่ดีผู้เขียนโปรแกรมเอง จะต้องเขียนโปรแกรมเพื่อดักจับข้อผิดพลาดนั้น หรือเขียนโปรแกรมเตือนให้ผู้ใช้ทราบว่าโปรแกรมกำลังทำงานผิดพลาด
ตัวอย่างเช่น ถ้าหากเขียนโปรแกรมอ่านข้อมูลจากแผ่นซีดี ถ้าหากในเครื่องคอมพิวเตอร์มีแผ่นซีดีอยู่ในตัวขับซีดี โปรแกรมจะอ่านข้อมูลออกมาได้ แต่ถ้าหากในตัวขับซีดีไม่มีแผ่นซีดีอยู่โปรแกรม ควรแจ้งข้อผิดพลาดออกมาทางจอด้วยไม่ใช่ให้โปรแกรมพยายามอ่านอยู่เรื่อยไป ดังนั้นในการเขียนโปรแกรมควรจะต้องการตรวจสอบก่อนที่จะอ่านซีดีด้วยว่า ในเครื่องมีแผ่นซีดีอยู่หรือไม่หรือในการเขียนโปรแกรมสำหรับหารเลข โดยให้ผู้ใช้ป้อนตัวเลขสองค่าเข้าไปในคอมพิวเตอร์ แล้วให้โปรแกรมคืนค่าผลหารออกมา ถ้าหากผู้ใช้ป้อนตัวเลขที่มีตัวหารเป็นศูนย์ ผลลัพธ์จากการหารจะเป็นค่าอนันต์ ซึ่งไม่มีค่านี้ในคอมพิวเตอร์ ดังนั้นในการเขียนโปรแกรมจะต้องตรวจสอบด้วยว่าตัวหารเป็นศูนย์หรือไม่ ถ้าเป็นศูนย์ก็ต้องแจ้งเตือนทางจอภาพ เป็นต้น
ในภาษาคอมพิวเตอร์สมัยใหม่ตั้งแต่ภาษาจาวากำเนิดมา ได้มีการเพิ่มหลักการของ Exception เพื่อควบคุมปัญหาความผิดพลาดต่างๆ ในการเขียนโปรแกรมโดยเฉพาะ และหลักการนี้ก็มีในการเขียนโปรแกรมด้วย VB เช่นกัน

เครื่องมือชิ้นหนึ่งที่ช่วยหาข้อผิดพลาดของโปรแกรมได้ คือ  Debugging Tools การใช้เครื่องมือต่างๆ อาจเลือกจากเมนู Debug โดยตรง หรือเลือกทางปุ่มบนทูลบาร์ Debug ก็ได้ (ถ้าหากหาทูลบาร์ Debug ไม่พบให้เลือกเมนู View>Toolbars>Debug) ซึ่งจะมีปุ่มสำหรับช่วยในการหาข้อผิดพลาดของโปรแกรม โดยปุ่มที่นิยมใช้ ได้แก่

การตั้ง Break Point และ Step Info

การตั้ง Break Point เป็นวิธีตรวจสอบการทำงานขั้นพื้นฐานวิธีหนึ่งโดยจะให้โปรแกรมหยุดทำงานในตำแหน่งคำสั่งที่กำหนด จากโปรแกรมดังรูปด้านล่าง ถ้าหากต้องการกำหนดจุด Break Point ที่จุดใดก็ให้นำเมาส์ไปคลิกที่แถบด้านซ้ายมือ โปรแกรมก็จะหยุดในตำแหน่งที่กำหนดเอาไว้

ในการกำหนดจุด Break Point นี้สามารถกำหนดได้มากกว่าหนึ่งจุด และถ้าหากต้องการยกเลิกจุดใดก็ทำได้โดยคลิกเมาส์ขวาที่จุดนั้นแล้วเลือกยกเลิก Break Point การกำหนดจุด Break Point นี้จะทำให้เราสามารถสังเกตผลลัพธ์จากการทำงานของโปรแกรมก่อนถึงจุดที่กำหนดได้

สำหรับการทดสอบการทำงานทีละคำสั่งสามารถเลือกได้จาก Step Info หรือกดคีย์ลัด <F8> โปรแกรมก็จะทำงานทีละคำสั่ง ตั้งแต่คำสั่งแรกสุดไล่ไปเรื่อยๆ และเมื่อทำงานมาถึงคำสั่งใด โปรแกรมจะแสดงแถบสีเหลืองที่คำสั่งนั้น และมีลูกศรชี้ที่หน้าคำสั่งด้วย

ในการทดสอบการทำงานของโปรแกรมทีละคำสั่ง หากต้องการทราบค่าของตัวแปรตัวใดให้นำเมาส์ไปชี้ที่ตัวแปรที่สนใจ โปรแกรมจะแสดงค่าของตัวแปรนั้นออกมา ตัวอย่างเช่นโปรแกรมนี้เป็นการค่าผลบวกตั้งแต่ 1 ถึง 10 โดยใช้ตัวแปร I เป็นตัวนับ และใช้ตัวแปร Sum เก็บผลลัพธ์ ถ้าหากต้องการทราบค่าตัวแปร I แล้วนำเมาส์ไปคลิกที่ I โปรแกรมจะแสดงผลออกมาดังนี้ ถ้าหากกดคีย์ <F8> ไปเรื่อยๆ โปรแกรมจะแสดงค่าที่เปลี่ยนไปด้วย

ถ้าหากต้องการให้แสดงค่าตัวแปรอย่างถาวร สามารถคลิกที่ปุ่มปักหมุนได้ โปรแกรมจะแสดงผลดังรูป

ถ้าหากต้องการแสดงตัวแปรอื่นด้วยก็ทำได้เช่นกัน จากรูปเป็นการแสดงตัวแปร Sum และ I และเมื่อรันโปรแกรมไปเรื่อยๆ ค่าของตัวแปรก็จะเปลี่ยนไปด้วย วิธีการนี้ทำให้ผู้เขียนโปรแกรมทราบค่าตัวแปรที่สนใจขณะที่โปรแกรมทำงานได้ ทำให้หาข้อผิดพลาดของโปรแกรมได้ง่ายขึ้น

ถ้าหากต้องการให้โปรแกรมแสดงผลค่าของตัวแปรทุกตัวออกมาทางหน้าต่างก็ทำได้เช่นกันโดยคลิกที่ปุ่ม Locals โปรแกรมจะแสดงผลตารางทางด้านล่าง ดังรูป

สำหรับในหัวข้อนี้จะกล่าวถึงรายละเอียดของข้อผิดพลาดทุกประเภทที่จะพบในระหว่างการเขียนโปรแกรม รวมทั้งวิธีการแก้ไขให้โปรแกรมทำงานได้ถูกต้อง และสุดท้ายจะกล่าวถึงวิธีการต่างๆที่ VB ช่วยให้เราจัดการกับข้อผิดพลาดประเภทต่างๆ ที่เกิดขึ้นได้สะดวกยิ่งขึ้น

ชนิดข้อผิดพลาด

ก่อนเริ่มต้นจัดการข้อผิดพลาด เราควรรู้จักว่าข้อผิดพลาดของ VB เสียก่อน ซึ่งมีอยู่             3 ประเภทคือ

  1. ข้อผิดพลาดจากรูปแบบภาษา (Syntax Error)
    เป็นความผิดพลาดที่เกิดขึ้นจากการเขียนคำสั่งที่ผิดรูปแบบใน VB ตัวอย่างของข้อผิดพลาดประเภทนี้ เช่น

จากการเขียนโปรแกรมข้างต้น เมื่อเราทำการคอมไพล์โปรแกรมจะปรากฏข้อผิดพลาดนี้เกิดจากการป้อนคำสั่งที่ผิดรูปแบบจาก To เป็น Too นอกจากนี้ถ้าหากเป็นตัวแปร หรือคำใดที่โปรแกรมไม่รู้จักโปรแกรมจะแสดงเครื่องหมายแจ้งเตือนออกมาด้วย

       2. ข้อผิดพลาดขณะรันโปรแกรม (Runtime Error)
เป็นความผิดพลาดที่เกิดในตอนรันโปรแกรม สามารถรันโปรแกรมได้ แต่เมื่อใช้งานจะเกิดข้อผิดพลาดขึ้น เช่น การถูกหารด้วยศูนย์ การหาไฟล์ไม่เจอ ระบุชื่อฐานข้อมูลผิด เป็นต้น ข้อผิดพลาดที่เกิดในขณะรันโปรแกรมแสดงได้ดังตัวอย่างต่อไปนี้

จากตัวอย่างที่เขียนขึ้น เมื่อคอมไพล์ผ่าน แต่เมื่อรันโปรแกรมและคลิกปุ่ม Button1 โปรแกรมจะทำงานจนถึงตำแหน่งดังกล่าว แล้วจะเกิดข้อผิดพลาด (Error) ขึ้น เนื่องจากโปรแกรมหาไฟล์ในตำแหน่งที่ระบุไว้ไม่พบ และโปรแกรมจะแจ้งข้อผิดพลาดออกมา

         3. ข้อผิดพลาดจากลอจิกของโปรแกรมผิดพลาด (Logic Error)
เป็นข้อผิดพลาดที่เกิดจากผลลัพธ์ของโปรแกรมออกมาไม่ตรงกับที่ผู้เขียนโปรแกรมตั้งใจไว้เช่น ต้องการคลิกปุ่มเพื่อเรียกดูฐานข้อมูล ปรากฏว่าคลิกแล้วไม่มีอะไรเกิดขึ้น โปรแกรมจะไม่แจ้งเตือนข้อผิดพลาดขณะรันโปรแกรม และขณะเดียวกันก็ไม่แสดงผลลัพธ์ที่ต้องการออกมาเช่นกัน
ข้อผิดพลาดลักษณะนี้ เรียกว่าข้อผิดพลาดทางลอจิก ซึ่งจะไม่ทำให้โปรแกรมหยุดทำงานแต่จะทำงานให้แบบผิดๆ ซึ่งในจุดนี้เราต้องตรวจสอบหาจุดผิดพลาดนั้นด้วยวิธีอื่นๆ ต่อไป ในการเขียนโปรแกรมเราสามารถหลีกเลี่ยงข้อผิดพลาดทั้งหมดได้โดยการปฏิบัติดังตัวอย่างต่อไปนี้

  • พิมพ์คำสั่ง, รูปแบบคำสั่งให้ถูกต้องการกฎของ VB
  • นำสิ่งที่เราคิดไว้ มาเทียบกับสิ่งที่เราเขียนโปรแกรม ซึ่งสิ่งที่คิดและสิ่งที่เขียนโปรแกรมต้องสอดคล้องกัน
  • ตรวจสอบดูว่ามีคำสั่งในส่วนใดบ้าง ที่อาจทำให้เกิดข้อผิดพลาดในขณะรันโปรแกรมได้และให้เพิ่มคำสั่งที่ทำหน้าที่จัดการกับข้อผิดพลาดที่จะเกิดขึ้น
  • ในขณะเขียนคำสั่งโปรแกรม หากพบข้อผิดพลาดต้องการแก้ไขทันที ไม่ควรรอจนเขียนโปรแกรมเสร็จแล้วจึงแก้ไข เพราะจะทำให้แก้ไขได้ยาก
  • ใช้คำสั่งและเครื่องมือใน VB ที่ใช้ในการตรวจสอบข้อผิดพลาดมาช่วย ซึ่งจะอธิบายถึงรายละเอียดในหัวข้อต่อไปนี้

 

 

คำสั่งประเภทนี้จะใช้ในการแก้ไขปัญหาข้อผิดพลาดในขณะรันโปรแกรม (Runtime Error) เพราะจะช่วยให้โปรแกรมทำงานต่อได้ เช่น เราเขียนโปรแกรมเปิดไฟล์ถ้าโปรแกรมหาไฟล์นั้นไม่พบโปรแกรมจะหยุดทำงานและแจ้งข้อผิดพลาดนั้นออกมา แต่ถ้าใช้คำสั่งจัดการข้อผิดพลาด โปรแกรมจะทำงานต่อโดยไม่หยุด ทำให้เราสามารถใช้งานส่วนอื่นๆ ได้ต่อไป ยกเว้นส่วนที่เกิดข้อผิดพลาด
การจัดการข้อผิดพลาดนั้นถือว่าเป็นเรื่องที่สำคัญในการพัฒนาโปรแกรมเพื่อการค้า เนื่องจากหาโปรแกรมหยุดทำงานเพียงเล็กน้อยแล้วปิดตัวเองลงไป ผู้ใช้งานคงจะไม่พอใจในสินค้าที่ผลิตขึ้นแน่นอน แต่การนำคำสั่งจัดการข้อผิดพลาดมาใช้เมื่อโปรแกรมเกิดการสะดุด แม้ว่าส่วนที่สะดุดจะใช้งานไม่ได้ แต่ส่วนฟังก์ชันอื่นๆ ยังคงทำงานได้อยู่ โปรแกรมจะไม่หยุดทำงานและปิดตัวเองบ่อย ผู้ใช้ก็จะรู้สึกดีกับโปรแกรมที่ใช้ด้วย
การนำคำสั่งจัดการข้อผิดพลาดมาใช้ เมื่อโปรแกรมเกิดข้อผิดพลาดจะข้ามส่วนนั้นไป และในส่วนของผู้ใช้ก็จะเห็นเพียงคำสั่งของโปรแกรมนั้นไม่ทำตามที่สั่ง แต่ที่จริงแล้วโปรแกรมทำตามที่สั่งแล้วแต่เกิดข้อผิดพลาดจึงข้ามไปและไม่ตอบสนองใดๆ ตามที่ผู้ใช้สั่ง ซึ่งในจุดนี้ผู้พัฒนาโปรแกรมต้องคอยรับฟังปัญหาจากผู้ใช้และตรวจหาข้อผิดพลาดที่ทำให้เกิดปัญหานั้นด้วย เพื่อแก้ไขและพัฒนาโปรแกรมในเวอร์ชันที่ดียิ่งขึ้นต่อไป คำสั่งจัดการข้อผิดพลาดใน VB มีอยู่ 2 แบบ คือ

  1. Unstructured Exception Handing เป็นคำสั่งใน VB เวอร์ชันก่อน ที่ใช้งายแต่ประสิทธิภาพไม่สูงมากนัก และระบบของคำสั่งยังมีน้อยอยู่
  2. Structured Exception Handing เป็นคำสั่งจัดการที่มีรูปแบบโครงสร้างชัดเจน อาจจะมีการใช้งานที่ยุ่งยากขึ้น แต่สามารถระบุและแจ้งชนิดข้อผิดพลาด (Error Type) ให้ทราบได้

ในการเขียนโปรแกรม VB นั้น ในโปรแกรมย่อยหนึ่ง จะสามารถมี Structured หรือ Unstructured Exception Handling อย่างใดอย่างหนึ่งเท่านั้น ไม่สามารถมีทั้งสองอย่างพร้อมกันได้

การจัดการข้อผิดพลาดแบบ Unstructured Exception Handling

การจัดการข้อผิดพลาดโดยใช้คำสั่ง Unstructured Exception Handling ที่ใช้จัดการกับข้อผิดพลาดในขณะรันโปรแกรม เช่น การถูกหารด้วยศูนย์ การหาไฟล์ไม่พบคำสั่งที่ใช้คือ คำสั่ง On Error ซึ่งเป็นคำสั่งที่มีความหมายว่า ถ้าเกิดข้อผิดพลาดขึ้นมาจะให้ไปทำคำสั่งใดต่อไป โดยคำสั่งนี้จะมีอยู่ 3 รูปแบบ คือ

  • คำสั่ง On Error Goto [LineNumber]
  • คำสั่ง On Error Resume Next
  • คำสั่ง On Error Goto 0

คำสั่ง On Error Goto [LineNumber]

คำสั่งนี้จะเป็นการบอกว่า เมื่อเกิดข้อผิดพลาดในโปรแกรมจะให้ไปที่บรรทัดที่เท่าไหร่ในโปรแกรมย่อยนั้น โดยอาจกำหนดตำแหน่งที่ต้องการไปเป็นชื่อเลเบลก็ได้ โดยชื่อของเลเบลจะประกอบด้วยตัวอักษรในภาษาอังกฤษ หรือตัวเลข ตามด้วยเครื่องหมายโคลอน (:) ตัวอย่างเช่น

จากตัวอย่างเป็นการเขียนโปรแกรมย่อยอีเวนต์ของปุ่มกดบนฟอร์ม เมื่อรันโปรแกรมแล้วคลิกปุ่มกดเมื่อโปรแกรมทำงานจะพบว่ามีการเขียนโปรแกรมให้ตัวแปร P ถูกหารด้วยค่าศูนย์ ทำให้เกิดข้อผิดพลาดขึ้นในส่วนนี้ การเขียนคำว่า On Error Goto Err_Handler จะเป็นการบอกว่าถ้าหากมีข้อผิดพลาดเกิดขึ้นให้กระโดดไปที่บรรทัดที่เขียนเลเบลเป็น Err_Handler ดังนั้นเมื่อรันโปรแกรมแล้วคลิกปุ่มกดจะให้โปรแกรมแสดงไดอะล็อกซ์บ็อกซ์แจ้งข้อผิดพลาดเป็น Divide By Zero ออกมา ผลลัพธ์ของโปรแกรมเป็นดังนี้

จากโปรแกรมให้ทดลองเปลี่ยนค่าในตัวแปร Q จะพบว่าไม่มีข้อผิดพลาดเกิดขึ้น หรือให้ลองใส่เครื่องหมาย Comment หน้าบรรทัด On Error GoTo แล้วรันโปรแกรม เปรียบเทียบผลลัพธ์ที่ได้จะพบว่ามีการแจ้งข้อผิดพลาดเกิดขึ้นในบรรทัดที่ถูกหารด้วยศูนย์
นอกจากจะแสดงไดอะล็อกแล้ว ยังมีอีกคำสั่งหนึ่งที่สำคัญ คือ Resume Next ซึ่งเป็นการบอกให้โปรแกรมทำคำสั่งถัดไปจากคำสั่งที่มีปัญหา ก็คือคำสั่ง Exit Sub ต่อ ซึ่งเป็นคำสั่งที่บอกให้ออกจากโปรแกรมย่อย

คำสั่ง On Error Resume Next

เมื่อเกิดข้อผิดพลาดในโปรแกรม ถ้าหากเราใส่คำสั่ง On Error Resume Next จะทำให้โปรแกรมข้ามคำสั่งที่เกิดข้อผิดพลาดไปทำยังคำสั่งต่อไปทันที ดังตัวอย่างต่อไปนี้

จากตัวอย่างข้างต้น เมื่อถึงบรรทัดที่มีคำสั่ง M = P/Q ซึ่งเป็นการหารด้วยศูนย์ โปรแกรมจะข้ามไปทำงานยังคำสั่งต่อไปทันที

คำสั่ง On Error Goto 0

คำสั่ง On Error Goto 0 เป็นการยกเลิก (Disable) การจัดการข้อผิดพลาดต่างๆที่เราเตรียมไว้ โปรแกรมจะหยุดทำงานทันทีและแจ้งข้อผิดพลาดเมื่อพบคำสั่งที่มีปัญหา เราจะใช้คำสั่งนี้ในตอนที่เราต้องการแก้โปรแกรมหาจุดผิด และต้องการดูว่าบรรทัดใดคือบรรทัดที่มีปัญหาเกิดขึ้น

จากตัวอย่างข้างต้น เมื่อโปรแกรมทำงานถึงบรรทัดที่มีคำสั่ง M = P/Q จะเกิดข้อผิดพลาด
และโปรแกรมจะปิดตัวเอง เหมือนไม่ได้ใช้คำสั่งจัดการข้อผิดพลาด

ขอบเขตคำสั่งของ On Error

ในการเขียนโปรแกรมนั้นเราสามารถใช้คำสั่ง On Error ตรวจสอบข้อผิดพลาดหลายๆ ช่วงได้ขอบเขตคำสั่งของ On Error จะมีผลสืบเนื่องจนกว่าจะพบคำสั่ง On Error ตัวถัดไป ดังตัวอย่างต่อไปนี้

จากโค้ดข้างต้นเมื่อโปรแกรมทำงานจนถึงที่เกิดข้อผิดพลาดที่ 1 โปรแกรมจะกระโดดมาทำในส่วนของเลเบล Err_Handler เนื่องจากก่อนหน้านั้นมีการกำหนดคำสั่ง On Error ให้กระโดดมาทำงานที่ส่วนนี้เมื่อเกิดข้อผิดพลาด

เมื่อทำงานในส่วนของ Err_Handler โปรแกรมจะแสดงคำว่า “in Err_handler” จากนั้นจะทำคำสั่ง Resume Next ซึ่งจะทำให้การทำงานกลับไปทำงานที่คำสั่งถัดจากคำสั่งที่เกิดข้อผิดพลาด ทำให้โปรแกรมแสดงคำว่า “On Error Goto Err_Handler”
โปรแกรมจะทำงานต่อและพบคำสั่ง On Error ที่สั่งให้ทำคำสั่งถัดไปเมื่อพบคำสั่งที่เกิดข้อผิดพลาด เพราะฉะนั้นเมื่อโปรแกรมทำงานถึงบรรทัดที่เกิดข้อผิดพลาดที่ 2 โปรแกรมจะทำคำสั่งต่อไปคือ แสดงข้อความ “On Error Resume Next” จะไม่กระโดดไปที่เลเบล Err_Handler และแสดงข้อความ “in Err_Handler” เหมือนกับในกรณีที่เกิดขึ้นกับบรรทัดข้อผิดพลาดที่ 1
ทำนองเดียวกันในบรรทัดที่เกิดข้อผิดพลาดที่ 3 ก่อนหน้านั้นมีการกำหนดให้ยุติการใช้คำสั่ง On Error โดยกำหนด Goto ให้เป็น 0 ดังนั้นโปรแกรมจะหยุดการทำงานและปิดตัวเองลงเมื่อเกิดข้อผิดพลาด คำสั่งแสดงข้อความ “On Error GoTo 0” จึงไม่ได้ถูกเรียกให้ทำงานเพราะโปรแกรมหยุดทำงานเสียก่อน

คำสั่งแก้ไขข้อผิดพลาด

เมื่อโปรแกรมตรวจพบข้อผิดพลาดขณะรันโปรแกรม (Runtime Error) และเราได้ใส่คำสั่งจัดการข้อผิดพลาดแล้ว ส่วนต่อไปที่เราต้องทำก็คือการเขียนคำสั่งแกไขปัญหาที่เกิดขึ้น เช่น กรณีที่หาไฟล์ไม่พบ ไฟล์ถูกลบไปแล้ว เราก็เพิ่มส่วนในการสร้างไฟล์ที่ต้องการ จากนั้นก็ใช้คำสั่ง Resume Next เพื่อกลับไปทำคำสั่งต่อไป ต่อจากคำสั่งที่มีปัญหา สำหรับคำสั่ง Resume มีวีธีใช้งานหลายวิธีดังนี้

  • คำสั่ง Resume เป็นคำสั่งที่ให้กลับไปทำที่คำสั่งเดิมซ้ำ
  • คำสั่ง Resume Next เป็นคำสั่งที่ให้กลับไปทำที่คำสั่งหลังจากคำสั่งเดิม
  • คำสั่ง Resume <หมายเลขบรรทัด หรือชื่อเลเบล> เป็นคำสั่งที่ให้กลับไปทำที่บรรทัดหรือเลเบลที่กำหนดไว้หลังคำว่า Resume

ตัวอย่างการใช้ Resume

ตัวอย่างโปรแกรมนี้จะแสดงการใช้คำสั่ง Resume และ Resume Next โดยโปรแกรมจะให้ผลลัพธ์การทำงานไม่เหมือนกันสำหรับแต่ละตัวเลือก ดังรูป

ขั้นตอนการพัฒนาโปรแกรมทำได้ดังนี้

  1. ให้เลือกโปรเจ็กต์แบบ Windows Form จากนั้นให้วางคอนโทรลบนฟอร์ม และกำหนดคุณสมบัติต่างๆ ของคอลโทรล ดังตารางต่อไปนี้

      2. เขียนโปรแกรมให้กับอีเวนต์ของปุ่มกดดังนี้

       3. เมื่อรันโปรแกรมจะให้เราเลือกว่า จะใช้คำสั่ง Resume หรือ Resume Next ซึ่งจะได้ผลลัพธ์ในแต่ละตัวเลือกดังต่อไปนี้

  • ถ้าใช้คำสั่ง Resume เมื่อเกิดข้อผิดพลาดในคำสั่ง  C = A / B เพราะ B มีค่าเป็น 0 โปรแกรมจะไปทำงานในส่วน Err_Handler เพื่อทำคำสั่งแก้ไขข้อผิดพลาดที่เกิดขึ้น โดยจะเปลี่ยนค่าของ B = 1 แล้วกลับไปทำยังคำสั่ง C = A / B อีกครั้งและพิมพ์ค่าของ C ซึ่งคำนวณได้เท่ากับ 1 ออกมาทางหน้าต่าง Output
  • ถ้าใช้คำสั่ง Resume Next โปรแกรมจะทำคำสั่งต่อไปจากคำสั่งที่ทำให้เกิดข้อผิดพลาดขึ้นมา ค่า B จะยังเป็น 0 เหมือนเดิม แต่ข้ามการคำนวณที่มีปัญหาไป และพิมพ์ค่า C ซึ่งเท่ากับ 0 ออกมาทางหน้าต่าง Output

ออบเจ็กต์สำหรับจัดการข้อผิดพลาด (ErrObject)

ในการเขียนโปรแกรมด้วย VB จะมีออบเจ็กต์ Err (Microsoft.VisualBasic.ErrObject) ซึ่งเป็นออบเจ็กต์ที่มีอยู่แล้วในระบบ เราไม่ต้องประกาศ ออกเจ็กต์นี้เป็นออบเจ็กต์ที่ใช้ในการเก็บข้อมูลของข้อผิดพลาดที่เกิดขึ้นขณะรันโปรแกรม (Runtime Error) เช่น สาเหตุที่เกิดข้อผิดพลาดซึ่งจะทำให้เราทราบถึงความบกพร่องของโค้ดโปรแกรม และสามารถเดาได้ถึงตำแหน่งที่ผิดของโค้ดโปรแกรมของเราได้ในออบเจ็กต์ Err มีเมธอดและคุณสมบัติที่น่าสนใจดังต่อไปนี้

คุณสมบัติ

  • Number เก็บหมายเลขของข้อผิดพลาดที่เกิดขึ้นครั้งล่าสุด ซึ่งใน VB จะใช้หมายเลขตั้งแต่ 1 ถึงประมาณ 1000 ในการเก็บหมายเลขข้อผิดพลาดทั้งหมด
  • Description เก็บข้อความบรรยายที่ตรงกับหมายเลขข้อผิดพลาดในคุณสมบัติ Number
  • Source แสดงชื่อของออบเจ็กต์ หรือโปรแกรมที่เป็นต้นเหตุของข้อผิดพลาดเมธอด
  • Raise เป็นเมธอดที่ใช้สร้างข้อผิดพลาดสมมติ เวลาที่เราต้องการทดสอบคำสั่งแก้ไขข้อผิดพลาดที่เราสร้างขึ้น รูปแบบการใช้งานเบื้องต้นเป็นดังนี้

  • Clear เป็นเมธอดที่ใช้ล้างค่าในออบเจ็กต์ Err ส่วนใหญ่เราจะใช้เมธอดนี้ เมื่อแก้ไขข้อผิดพลาดที่เกิดขึ้นเรียบร้อยแล้ว ซึ่งใน VB จะใช้เมธอดนี้โดยอัตโนมัติ หลังจากการทำงานของคำสั่งเหล่านี้เสร็จสิ้น
    คำสั่ง On Error ทุกชนิด
    คำสั่ง Resume ทุกชนิด
    คำสั่ง Exit Sub, Exit Function หรือ Exit Property

พิจารณาตัวอย่างการใช้งานต่อไปนี้ โดยเพิ่มคำสั่งนี้ลงไปในตัวอย่างที่ผ่านมา โดยเขียนไว้ก่อนหน้าคำสั่ง Resume

ตัวอย่างแสดงการใช้ออบเจ็กต์ ErrObject

ตัวอย่างโปรแกรมต่อไปนี้จะแสดงการใช้งานออบเจ็กต์ Err โดยจะให้เราใส่ค่าคุณสมบัติ Number ลงไป แล้วคลิกปุ่ม Generate Error ก็จะปรากฏไดอะล็อกแสดงข้อผิดพลาดที่ตรงกับคุณสมบัติ Number ที่เราใส่เข้าไป ดังรูป

<< Go Back