การเขียนโปรแกรมแต่ละครั้ง ย่อมมีความผิดพลาดต่างๆ เกิดขึ้น
และผู้เขียนก็จำเป็นต้องแก้ไขให้ถูกต้อง
มิฉะนั้นโปรแกรมก็จะไม่สามารถใช้งานได้ หรืออาจประมวลผลที่ผิดออกมา
ในการเขียนโปรแกรม VBA ใน
เอ็กเซลล์นั้น
ผู้เขียนสามารถตรวจสอบโปรแกรมได้ด้วยการรันโปรแกรมดูได้ในได้ในทุกขั้นตอน
เมื่อโปรแกรมตรวจพบข้อผิดพลาดใดๆ
ก็จะมีไดอะล็อกข้อความปรากฏขึ้นมาให้ผู้เขียนได้ทำการแก้ไข
ในบทนี้จะนำเสนอตัวอย่างข้อผิดพลาดที่มักพบบ่อยๆ เมื่อทำการเขียนโปรแกรม
ซึ่งน่าจะเป็นประโยชน์ให้ผู้เขียนได้เป็นแนวทางในการแก้ไขปัญหาที่เกิดขึ้น
ข้อผิดพลาดในการเขียนโปรแกรมที่พบอาจแบ่งได้เป็น 2 ประเภทคือ
1.ข้อผิดพลาดประเภท Compile Error ซึ่งเกิดในขณะโปรแกรมกำลังแปรภาษาของโปรแกรมที่เขียน
2.ข้อผิดพลาดประเภท Rut-time Error เกิดขึ้นเมื่อมีการใช้โปรแกรม แม้ว่าโปรแกรมที่ทำการ Compile ผ่านไปแล้วก็ตาม อาจยังมีข้อผิดพลาดเมื่อนำไปใช้
1. ข้อผิดพลาดประเภท Compile Error ที่พบบ่อย
1.ข้อผิดพลาดที่เกิดจากการกำหนดชนิดตัวแปรผิด หรือไม่เหมาะสม
รูปที่ 9.1
ตัวอย่างเช่น ตัวแปร x เป็นชนิด String แต่ตัวแปร y เป็นชนิด Integer ซึ่งไม่สามารถนำมาคูณกันได้
Private Sub CommandButton1_Click()
Dim a As String
Dim x As String
Dim y As Integer
x = TextBox1.Text
y = TextBox2.Text
a = x*y
Label3.Caption = a
End Sub
2.ความผิดพลาดที่เกิดจากการไม่กำหนดตัวแปร หรืออาจพิมพ์ชนิดตัวแปรผิด
รูปที่ 9.2
ตัวอย่างเช่น ตัวแปร a ประกาศตัวแปรแบบ String แต่ผู้เขียนโปรแกรมอาจพิมพ์ผิด
Private Sub CommandButton1_Click()
Dim a As Strin
Dim x As Integer
Dim y As Integer
x = TextBox1.Text
y = TextBox2.Text
a = x*y
Label3.Caption = a
End Sub
3. ข้อผิดพลาดที่เกิดจากการใช้บล็อค If ไม่มีคำสั่ง End If ปิดท้าย
รูปที่ 9.3
4.โปรแกรมไม่มี End Sub ที่ส่วนท้ายสุดของโปรแกรม
รูปที่ 9.4
5.ข้อผิดพลาดที่เกิดจากการไม่มี Method หรือ Property หรืออาจจะพิมพ์ผิด
รูปที่ 9.5
ตัวอย่างเช่น TextBox2 ใช้คุณสมบัติ Text เพื่อส่งค่าคืนให้ y แต่ชื่อคุณสมบัติพิมพ์ผิดเป็น Tex ซึ่งตัว t หายไป
Private Sub CommandButton1_Click()
Dim a As String
Dim x As Integer
Dim y As Integer
x = TextBox1.Text
y = TextBox2.Tex
a = x*y
Label3.Caption = a
End Sub
6. ข้อผิดพลาดที่เกิดจากการพิมพ์ผิดหรือใช้สัญลักษณ์ผิด
รูปที่ 9.6
Private Sub CommandButton1_Click()
Dim a, x, y As Integer
x = TextBox1.Text
y = TextBox2.Tex
a = x*y
Label3,Caption = a
End Sub
2. ข้อผิดพลาดประเภท Run-time Error ที่พบบ่อย
1. Run-time error ‘6’ Overflow ข้อผิดพลาดที่เกิดจากค่าส่งคืนมีค่ามากกว่าชนิดของตัวแปรที่กำหนด
รูปที่ 9.7
Private Sub CommandButton1_Click()
Dim a, x, y As Integer
x = TextBox1.Text
y = TextBox2.Tex
a = x*y
Label3.Caption = a
End Sub
จากตัวอย่างจะเห็นว่าค่าตัวแปรทั้งหมดกำหนดให้เป็นชนิด Integer ซึ่งมีค่าอยู่ระหว่าง -32,768 ถึง 32,767 นั้นหมายความว่า ถ้ากำหนดค่าให้ตัวแปรมากกว่าหรือน้อยกว่านี้ หรือผลของการคูณ x และ y มากกว่าหรือน้อยกว่าค่าจำกัดของ Integer ก็จะเกิดไดอะล็อกแสดงข้อความ Overflow ขึ้นมา
2. Run-time error ‘11’ ข้อผิดพลาดที่เกิดจากการหารค่าด้วย “0”
รูปที่ 9.8
Private Sub CommandButton1_Click()
Dim a As String
Dim x As Integer
Dim y As Integer
x = TextBox1.Text
y = TextBox2.Text
a = x / y
Label3.Caption = a
End Sub
3. Run-time error ‘13’ Type mismatch ข้อผิดพลาดที่เกิดจากการพิมพ์ค่าตัวแปรผิด
ตัวอย่างเช่น มีฟอร์มให้ผู้ใช้กรอกข้อมูลเป็นตัวเลข 9X10 =90 แต่ผู้ใช้กรอกข้อมูลเป็นตัวอักษร 9X1o(อักษรตัว โอ) ทำให้ไม่สามารถคำนวนได้
รูปที่ 9.9
รูปที่ 9.10
3. Run-time error’424’ Object required ข้อผิดพลาดที่เกิดจาก โปรแกรมไม่มี Object หรืออาจพิมพ์ชื่อ Object อาจพิมพ์ผิด
รูปที่ 9.11
ตัวอย่างเช่น TextBox2 เป็นอ๊อปเจค ที่ผู้เขียนโปรแกรมสร้างไว้บนฟอร์ม แต่เวลาลงรหัสคำสั่งพิมพ์เป็น TextBox ซึ่งเลข 2 หายไป ทำให้โปรแกรมหาอ๊อปเจคไม่พบ
Private Sub CommandButton1_Click()
Dim a As String
Dim x As Integer
Dim y As Integer
x = TextBox1.Text
y = TextBox.Text
a = x*y
Label3.Caption = a
End Sub
การป้องกันข้อผิดพลาดในขณะโปรแกรมกำลังทำงาน
ใน
ขณะที่โปรแกรมกำลังทำงานอยู่นั้น อาจมีข้อผิดพลาดเกิดขึ้นกับโปรแกรม
อันเนื่องมาจากสาเหตุต่างๆ
แต่ผู้เขียนโปรแกรมต้องการให้โปรแกรมสามารถทำงานต่อไปได้ ดังนั้น
ในส่วนของโปรแกรมต้องมีคำสั่ง ที่สั่งให้โปรแกรมทำงานต่อไปดังนี้
On Error Resume Next หากเกิดข้อผิดพลาดเกิดขึ้นใน procedure ให้โปรแกรมสามารถดำเนินการในคำสั่ง statement ต่อไป
On Error GoTo 0 หากเกิดข้อผิดพลาดเกิดขึ้นใน procedure ให้โปรแกรมสามารถดำเนินการในคำสั่ง statement ต่อไป ตามตำแหน่งอ้างอิง
On Error GoTo line หากเกิดข้อผิดพลาดเกิดขึ้นใน procedure ให้โปรแกรมสามารถดำเนินการในคำสั่ง statement บันทัดที่
ไม่มีความคิดเห็น:
แสดงความคิดเห็น