Chapter 4 การใช้งานคำสั่งและฟังก์ชันมาตรฐานของ Visual Basic

Chapter 4 Using the Standard Statements and Functions in Visual Basic

การใช้งานคำสั่งและฟังก์ชันมาตรฐานของ Visual Basic

  • กลุ่มคำสั่ง Statements
    • กลุ่มคำสั่งที่สร้างเงื่อนไขในการตัดสินใจ
    • กลุ่มคำสั่งในการวนลูป หรือทำซ้ำ
  • กลุ่มฟังก์ชัน Functions
    • ฟังก์ชันที่เกี่ยวข้องกับข้อมูลชนิด String
    • กลุ่มคำสั่งและฟังก์ชันที่เกี่ยวกับอาร์เรย์
    • กลุ่มฟังก์ชันที่เกี่ยวข้องกับตัวแปร Variant
    • กลุ่มฟังก์ชันที่เกี่ยวข้องกับการแปลงชนิดของข้อมูล
    • กลุ่มฟังก์ชันสำหรับสร้างกรอบโต้ตอบผู้ใช้
  • กลุ่มฟังก์ชันและคำสั่งอื่นๆ ที่น่าสนใจ
    • ฟังก์ชัน Format ( ) และ Format$ ( )
    • การใช้งานคำสั่ง With...End With
  • การสร้างโพรซีเดอร์ทั่วๆ ไป
    • การสร้างซับรูทีน
    • การสร้างฟังก์ชัน

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

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

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

คำสั่งที่น่าสนใจใน VB (Statements)

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

คำสั่งที่เกี่ยวกับการสร้างเงื่อนไข (Condition Statements)

เป็นกลุ่มคำสั่งที่คุณต้องใช้มากที่สุด ไม่ว่าคุณจะเขียนโปรแกรมด้วยภาษาอะไรก็ตาม และก็ถือได้ว่า เป็นกลุ่มคำสั่งที่มีความสำคัญ มากที่สุดเช่นกัน ซึ่งประกอบไปด้วยกลุ่มคำสั่ง 2 ชุดดังนี้

  • กลุ่มคำสั่งที่สร้างเงื่อนไขในการตัดสินใจ (Decision Structures)
  • กลุ่มคำสั่งในการวนลูป หรือทำซ้ำ (Loop Structures)

กลุ่มคำสั่งที่สร้างเงื่อนไขในการตัดสินใจ (Decision Structures)

  • คำสั่ง If-Then

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

If condition Then statements

  • ตัวแปร condition หมายถึง เงื่อนไขที่คุณกำหนดขึ้นมา
  • ตัวแปร statements หมายถึง เมื่อเงื่อนไขเป็นจริงแล้ว จะให้ทำอะไร เช่น

If cnt < 5 Then a = b + cnt

จากตัวอย่าง ถ้าตัวแปร cnt น้อยกว่า 5 ให้เอาตัวแปร b+cnt แล้วเก็บไว้ในตัวแปร a จะเห็นได้ว่า เฉพาะกรณีตัวแปร cnt น้อยกว่า 5 เท่านั้น จึงจะมีการบวกกัน แต่ถ้าตัวแปร cnt มากกว่า 5 ก็จะไม่มีผลอะไร แต่คุณยังสามารถสร้างเงื่อนไข เพิ่มขึ้น เผื่อไว้ในกรณีที่ เงื่อนไขไม่เป็นจริง โดยมีรูปแบบการใช้งานดังนี้

If condition Then
statements
Else
elsestatements
End If

  • คำสั่ง Else หมายถึง กรณีที่เงื่อนไขดังกล่าวเป็นเท็จ
  • คำสั่ง End If หมายถึง จบเงื่อนไข
  • ตัวแปร elsestatements หมายถึง ชุดคำสั่งที่จะทำ เมื่อเงื่อนไขเป็นเท็จ เช่น

If cnt<5 Then
  a = b + cnt
Else
   a = b - cnt
End If

จากตัวอย่าง เห็นได้ว่า มีการเพิ่มกรณีที่ตัวแปร cnt >=5 ให้เอาตัวแปร b-cnt แล้วให้เก็บไว้ในตัวแปร a คุณยังสามารถเพิ่มกรณีตรวจสอบ เงื่อนไขมากขึ้นอีกก็ได้ เมื่อคุณมีการสร้างแอพพลิเคชันขึ้นมา บางครั้ง คุณอาจต้องสร้างเงื่อนไขตรวจสอบมากมาย และแยกเป็นหลายๆ กรณี ซึ่งเป็นรูปแบบที่คุณจะได้พบแน่นอน มีรูปแบบการใช้งานดังนี้

If condition Then
statements
ElseIf condition2 Then
elseifstatements
Else
elsestatements
End If

  • คำสั่ง ElseIf หมายถึง คำสั่งสำหรับเพิ่มกรณีตรวจสอบขึ้นมา เพื่อสร้างเงื่อนไขขึ้นมาอีก 1 กรณี
  • ตัวแปร condition2 หมายถึง เป็นเงื่อนไขที่ 2 ที่คุณกำหนดขึ้นมา
  • ตัวแปร elseifstatements หมายถึง ชุดคำสั่งสำหรับกรณีเงื่อนไขที่ 2 เช่น

If cnt < 5 Then
  a = b + cnt
ElseIf cnt < 10 Then
   a = b * cnt
Else
   a = b - cnt
End If

สมมติว่าตัวแปร cnt=6 ซึ่งจะทำให้กรณีแรก (cnt<5) เป็นเท็จทันที จึงมาที่เงื่อนไขที่ 2 ปรากฎว่า เป็นจริง จึงนำตัวแปร b*cnt แล้วเก็บไว้ในตัวแปร a ให้คุณลองเปลี่ยนเป็น cnt=10 ทำให้กรณีที่ 1 และ 2 เป็นเท็จทันที ก็จะมาทำคำสั่งที่อยู่ในเงื่อนไข else ทันที คุณสามารถเพิ่มกรณีแบบนี้ ได้ไม่จำกัด กล่าวคือ ใส่ชุดของ ElseIf condition2 Then elseifstatements   มากเท่าใดก็ได้ ตามที่คุณต้องการ แต่ถ้ามีการตรวจสอบเงื่อนไขมากๆ หลายกรณี โปรแกรมเมอร์ไม่นิยม ใช้ชุดคำสั่งนี้ จะใช้ชุดคำสั่ง Select Case เพราะมีการตรวจสอบ ที่ทำให้ source code มีระเบียบ เรียบร้อยมากกว่า

  • คำสั่ง Select-Case

คำสั่งนี้เหมาะสำหรับ กรณีที่มีเงื่อนไขมากๆ ยิ่งมากยิ่งดี เพราะ ถ้าคุณใช้เงื่อนไขแบบ If-Then-ElseIf  จะทำให้คุณสับสนเป็นอย่างยิ่ง เพราะถ้ากรณีที่คุณ ต้องการตรวจสอบเงื่อนไขมากๆ แล้ว คุณจะไม่สามารถจัดกลุ่ม หรือจัดระเบียบให้ source code เรียบร้อยได้เลย แต่ด้วยคำสั่ง Select Case มันจะช่วยลดขั้นตอน และความสับสนทั้งหมดที่เกิดขึ้นมาได้ มีรูปแบบการใช้งานดังนี้

Select Case testexpression
  Case expressionlist1
statements1
  Case [Is] expressionlist2
statements2
  [Case [Is] expressionlist-n ]
     [statements-n ]
  Case Else
elsestatements
End Select

  • คำสั่ง Select Case หมายถึง เริ่มกรณีตรวจสอบแบบ Select Case
  • ตัวแปร testexpression หมายถึง ตัวแปรที่จะนำมาตรวจสอบ
  • ตัวแปร expressionlist1 หมายถึงค่าของตัวแปรในกรณีที่ 1
  • ตัวแปร statement1 หมายถึง ชุดคำสั่งที่ต้องกระทำ เมื่อค่าของตัวแปรตรงกับกรณีที่ 1
  • ตัวแปร expressionlist2 หมายถึงค่าของตัวแปรในกรณีที่ 2
  • ตัวแปร statement2 หมายถึง ชุดคำสั่งที่ต้องกระทำ เมื่อค่าของตัวแปรตรงกับกรณีที่ 2
  • คำสงวน Is จะใช้ในกรณีที่คุณใส่เฉพาะเงื่อนไข ซึ่ง VB จะใส่ให้คุณโดยอัตโนมัติ
  • คำสั่ง Case Else หมายถึง เมื่อค่าของตัวแปร ไม่เท่ากับกรณีที่ผ่านมาทั้งหมด ให้มาที่กรณีนี้
  • ตัวแปร elsestatements หมายถึง ชุดคำสั่งสำหรับกรณีที่ค่าของตัวแปรไม่ตรงกับกรณีใดเลย
  • คำสั่ง End Select หมายถึง จบการตรวจสอบแบบ Select Case เช่น

Private Sub Command1_Click()
   Dim cnt As Integer
   cnt = 6
Select Case cnt
  Case Is < = 5
    Debug.Print "Cnt Less than or equal 5"
  Case Is < = 7
     Debug.Print "Cnt Less than or equal 7"
  Case Else
    Debug.Print "Cnt Very big"
End Select
End Sub

จากตัวอย่างข้างต้น ให้คุณลองทดสอบเปลี่ยนค่าของตัวแปร cnt ไปเรื่อยๆ สังเกตผลที่หน้าต่าง Immediate

กลุ่มคำสั่งที่ใช้สำหรับสั่งให้ทำซ้ำ (Loop Statements)

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

1. For-Next

2. Do While-Loop

3. Do-Loop While

4. Do Until-Loop

5. Do-Loop Until

การวนลูปแต่ละชนิด มีรายละเอียดดังนี้

  • คำสั่ง For-Next

คำสั่งนี้ มีหน้าที่สำหรับสั่งให้ VB วนลูป เหมาะสมกับการทำงาน ที่คุณทราบจำนวนรอบ หรือทราบขอบเขตการวนที่แน่นอน มีรูปแบบการใช้งานดังนี้

For counter = start To end   [Step step ]
statements
[Exit For]
   [statements ]
Next [counter ]

  • ตัวแปร counter หมายถึง ตัวแปรที่คุณกำหนดขึ้นมาเพื่อ เป็นตัวนับรอบที่ใช้ในการวนลูป
  • ตัวแปร start หมายถึง ค่าเริ่มต้นของตัวนับ เป็นเลขจำนวนจริง คุณควรที่จะใช้เลขจำนวนเต็มเท่านั้น เพื่อง่ายต่อการตรวจสอบค่าตัวนับ
  • คำสงวน To หมายถึง ขอบเขตการนับ
  • ตัวแปร end หมายถึง ค่าสิ้นสุดของตัวนับ ไม่จำเป็นต้องเป็นตัวเลข ในบางครั้งคุณอาจสร้างเป็นเงื่อนไขที่ไม่ใช่ตัวเลขก็ได้ แต่ในการใช้งานโดยทั่วๆ ไป จะเป็นตัวเลข และควรจะเป็นเลขจำนวนเต็มด้วย
  • คำสงวน Step หมายถึง เป็นการกำหนดค่าที่จะเพิ่มขึ้นของตัวนับในแต่ละรอบ ถ้าคุณไม่กำหนด จะเพิ่มรอบละ 1
  • ตัวแปร step หมายถึง ค่าของตัวนับที่จะเพิ่มขึ้นในแต่ละรอบ จะต้องเป็นเลขจำนวนจริงเท่านั้น ในการใช้งานตามปกติ คุณควรใช้เลขจำนวนเต็ม เพื่อง่ายต่อการตรวจสอบจำนวนรอบในภายหลัง
  • ตัวแปร statements หมายถึง ชุดคำสั่งที่คุณต้องการวนลูป
  • คำสั่ง Exit For หมายถึง คำสั่งที่บังคับให้ออกจากลูปทันที จะใช้ในบางกรณีเท่านั้น เช่นการดักจับข้อผิดพลาด

clip_image002

สาเหตุที่ผู้เขียนแนะนำให้คุณกำหนดค่าตัวนับ หรือตัวสิ้นสุด เป็นเลขจำนวนเต็ม เพราะเนื่องจากว่า ถ้าคุณเคยทดสอบ การประมวลผลเครื่องคอมพิวเตอร์ ด้วยโปรแกรม Benchmark, Wintune 99, หรือ FPU WinMark ฯลฯ ตามมาตรฐาน iComp Index 1.0, 2.0 หรือ 3.0 คุณจะพบว่า ไม่ว่าคุณจะใช้ CPU ยี่ห้อใดก็ตาม การประมวลผลแบบ ทศนิยมจะช้ากว่า การประมวลผลแบบเลขจำนวนเต็มอยู่พอสมควร ซึ่งจะส่งผลเป็นอย่างยิ่ง ในกรณีที่คุณมีการสั่งวนรอบหลายหมื่น หรือแสนรอบ รวมถึงการสั่งให้เข้าถึงข้อมูลในแต่ละ record ในฐานข้อมูลที่มี  records จำนวนมากๆ แอพพลิเคชันจะประมวลผลช้ามาก คุณควรให้น้ำหนัก ในเรื่องรายละเอียดปลีกย่อยนี้ พอสมควรครับ :-) ด้วยเหตุนี้เอง คุณควรที่จะใช้ข้อมูลชนิดที่เป็นเลขจำนวนเต็ม ไม่ว่าจะเป็น Integer หรือ Long ให้มากที่สุด เท่าที่จะเป็นไปได้ และข้อให้ใช้ชนิดข้อมูลที่เป็นพื้นฐานให้มากที่สุด ซึ่งยังเป็นการประหยัดทรัพยากรระบบอีกทางหนึ่งด้วย

สำหรับตัวอย่างการใช้งานคำสั่ง For-Next มีดังนี้

Private Sub Form_Activate()
Dim i As Integer
  For i = 1 To 10
   Print i
  Next i
End Sub

ตัวอย่างดังกล่าว เป็นการพิมพ์เลขตั้งแต่ 1-10 ลงบนฟอร์ม ให้คุณลองเปลี่ยน step จาก 1 เป็น 2 แล้วสังเกตผล

  • คำสั่ง Do While-Loop

เป็นคำสั่งทำซ้ำ ที่มีจำนวนรอบขึ้นอยู่กับเงื่อนไข

Do While condition
statements
   [Exit Do]
Loop

  • ตัวแปร condition หมายถึง เงื่อนไขที่คุณกำหนดขึ้นมา
  • ตัวแปร statements หมายถึง ชุดคำสั่งที่คุณต้องการทำซ้ำ
  • คำสั่ง Exit Do หมายถึง ออกจาก Do While-Loop ทันที
  • คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป

ลูปแบบ Do While นี้ จะวนลูปก็ต่อเมื่อเงื่อนไข (ตัวแปร condition) ยังเป็นจริงอยู่ ถ้าเงื่อนไขดังกล่าวเป็นเท็จเมื่อใด ก็จะออกจากลูปทันที มีข้อที่น่าสังเกตคือ การใช้ ลูปแบบนี้ จะมีโอกาสที่ไม่ต้องวนลูปเลยแม้แต่รอบเดียว นั่นคือ ถ้าเงื่อนไขที่เข้ามาเป็นเท็จ ก็ไม่ต้องวนทันที เช่น

Private Sub Form_Activate()
Dim i As Integer
  Do While i <= 10
   Print i
    i = i + 1
   Loop
End Sub

ตัวอย่างด้านบน จะมีผลเหมือนกับลูป For-Next เพียงแต่เปลี่ยนลักษณะวนลูป และเงื่อนไข ลองเปลี่ยนเงื่อนไข ดังนี้

Private Sub Form_Activate()
Dim i As Integer
  i = 11
  Do While i <= 10
   Print i
    i = i + 1
   Loop
End Sub

จะเห็นได้ว่า บนฟอร์มไม่มีการพิมพ์เลข แต่อย่างใด เพราะตัวแปร i มีค่าเท่ากับ 11 ส่งผลให้เงื่อนไขเป็นเท็จทันที

  • คำสั่ง Do-Loop While

คำสั่งนี้เป็นการสั่งวนลูป   มีจำนวนรอบขึ้นอยู่กับเงื่อนไข มีรูปแบบการใช้งานดังนี้

Do
statements
   [Exit Do]
Loop While condition

  • ตัวแปร condition หมายถึง เงื่อนไขที่คุณกำหนดขึ้นมา
  • ตัวแปร statements หมายถึง ชุดคำสั่งที่คุณต้องการทำซ้ำ
  • คำสั่ง Exit Do หมายถึง ออกจาก Do- Loop While ทันที
  • คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป

จะเห็นได้ว่า มีลักษณะคล้ายกับแบบที่ 1 เพียงแต่ย้ายเงื่อนไขมาไว้ด้านล่าง ซึ่งหมายความว่า ลูปแบบนี้จะวนอย่างน้อยที่สุด 1 รอบ เพื่อตรวจสอบเงื่อนไข (ตัวแปร condition) ในรอบแรกที่เข้ามาก่อนว่าเป็นจริง หรือเท็จ ถ้าจริงก็จะวนลูปต่อไปตามปกติ แต่ถ้าเป็นเท็จ จะออกจากลูปทันที เช่น

Private Sub Form_Activate()
Dim i As Integer
   Do
   Print i
    i = i + 1
   Loop While i <= 10
End Sub

เช่นกัน ตัวอย่างนี้ เป็นการพิมพ์เลขตั้งแต่ 1 ถึง 10 บนฟอร์ม ให้คุณลองเปลี่ยนเงื่อนไขดังนี้

Private Sub Form_Activate()
Dim i As Integer
i = 11
   Do
   Print i
    i = i + 1
   Loop While i <= 10
End Sub

ข้อแตกต่างของลูป Do While - Loop กับ Do-Loop While นั่นคือ ถ้าเป็น Do While-Loop กรณีที่เงื่อนไขเป็นเท็จ บนฟอร์ม จะไม่ปรากฏตัวเลขอะไรเลย เพราะเนื่องจากว่า ไม่ได้มีการวนลูปแต่อย่างใด เพราะเงื่อนไขเป็นเท็จ (ค่า i=11) แต่ลูปแบบ Do-Loop While จะปรากฎค่าของตัวเงื่อนไขออกมาก่อน ถ้าจริง ก็จะวนลูปตามปกติ แต่กรณีนี้เป็นเท็จ จึงแสดงค่าออกมา 1 ค่า ซึ่งเกิดมาจาก การวนรอบแรกนั่นเอง

  • คำสั่ง Do Until-Loop

คำสั่งนี้มีหน้าที่สั่งให้วนลูปเช่นกัน มีจำนวนรอบขึ้นอยู่กับเงื่อนไข (condition) ถ้าเงื่อนไขเป็นเท็จ จึงจะวนลูป แต่ถ้าเป็นจริงจะไม่มีการวนแต่อย่างใด ซึ่งจะตรงกันข้ามกับลูปชนิด  Do While-Loop มีรูปแบบการใช้งานดังนี้

Do Until condition
statements
  [Exit Do]
statements
Loop

  • ตัวแปร condition หมายถึง เงื่อนไขที่คุณกำหนดขึ้นมา
  • ตัวแปร statements หมายถึง ชุดคำสั่งที่คุณต้องการทำซ้ำ
  • คำสั่ง Exit Do หมายถึง ออกจาก Do Until- Loop ทันที
  • คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป เช่น

Private Sub Command1_Click()
Dim x As Integer
Do Until x >= 10
  Print x
  x = x + 1
Loop
End Sub

ตัวอย่างนี้เป็นการพิมพ์เลข 1 ถึง 10 ลงบนฟอร์ม ทุกๆ ครั้งที่มีการคลิ๊กที่ปุ่ม Command1

  • คำสั่ง Do-Loop Until

คำสั่งการวนลูปแบบนี้มีลักษณะคล้ายกับลูปแบบ Do-Loop While เพียงแต่ เงื่อนไขที่เข้ามาจะต้องเป็นเท็จ จึงจะวนลูป ถ้าเงื่อนไขเป็นจริง จะออกจากลูปทันที การใช้ลูปแบบนี้จะมีการวนอย่างน้อยที่สุด 1 รอบเช่นกัน เนื่องจากการวนรอบแรก ที่จะต้องมีการตรวจสอบเงื่อนไขนั่นเอง มีรูปแบบการใช้งานดังนี้

Do
statements
   [Exit Do]
   [statements ]
Loop Until condition

  • ตัวแปร condition หมายถึง เงื่อนไขที่คุณกำหนดขึ้นมา
  • ตัวแปร statements หมายถึง ชุดคำสั่งที่คุณต้องการทำซ้ำ
  • คำสั่ง Exit Do หมายถึง ออกจาก Do Loop-Until ทันที
  • คำสั่ง Loop หมายถึง ขอบเขตสิ้นสุดการวนลูป เช่น

Private Sub Command1_Click()
Dim x As Integer
  x = 11
Do
  Print x
  x = x + 1
Loop Until x >= 10
End Sub

จากตัวอย่างนี้ จะเห็นได้ว่า ค่า x=11 ซึ่งถึงแม้ว่า จะทำให้เงื่อนไขเป็นจริง (ออกจากลูป) ก็ตาม แต่ฟอร์ม ก็ยังคงพิมพ์ค่า x ออกมา 1 ค่า เนื่องจาก การวนรอบแรกนั่นเอง

clip_image002[1]

ข้อควรระวัง ไม่ว่าคุณจะใช้ลูปแบบใดก็ตาม ในกรณีที่คุณประกาศตัวนับ เป็นเลขจำนวนเต็มชนิด Integer ขอให้คุณระวังเกี่ยวกับ จำนวนรอบ ในการวนให้ดี เพราะเนื่องจากว่า ขอบเขตของข้อมูลขนิด Integer มีค่าระหว่าง -32768 ถึง 32767 ซึ่งถ้าคุณใช้แต่ค่าบวก จะทำให้ตัวแปรดังกล่าว สามารถวนได้เพียง 32768 รอบเท่านั้น ซึ่งจะมีผลในตอนรัน ถ้ามีโอกาสที่ทำให้เกิดการวนมากกว่า 32768 รอบ ก็จะเกิด error ได้ ซึ่งเป็นเหตุการณ์ที่ผู้เขียนพบโดยบังเอิญ

ฟังก์ชันที่น่าสนใจใน VB (Functions)

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

ฟังก์ชันที่เกี่ยวข้องกับข้อมูลชนิด String

สำหรับฟังก์ชันในกลุ่มนี้ เป็นฟังก์ชันที่นิยมใช้กันมากอีกกลุ่มหนึ่ง ซึ่งจะเป็นฟังก์ชันที่จัดการด้านต่างๆ ที่เกี่ยวข้องกับข้อมูลชนิด String ทั้งสิ้น โดยมีรายละเอียดดังนี้

  • ฟังก์ชัน Len ( ) และฟังก์ชัน LenB ( )

หน้าที่ ใช้สำหรับหาขนาดของตัวแปร  String
รูปแบบการใช้งาน

Len(string   | varname )

ตัวแปร string หรือ varname หมายถึง ข้อความที่คุณต้องการหาขนาด

ค่าที่ส่งกลับ เป็นตัวเลขจำนวนจริง Long ซึ่งสามารถแยกได้ 2 กรณี คือ

  • ่ฟังก์ชัน Len ( ) จะคืนค่าเป็นจำนวนตัวอักษรของตัวแปร String
  • ฟังก์ชัน LenB ( ) จะคืนค่าเป็นจำนวนหน่วยความจำที่ตัวแปร String นั้นใช้อยู่ มีหน่วยเป็นไบต์ (bytes) และถ้าตัวแปร String มีช่องว่างอยู่ ช่องว่าง 1 ช่อง จะถือเป็น 1 ตัวอักษรด้วย

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

Private Sub Form_Load()
Dim name As String 'ตัวแปรสำหรับเก็บข้อความ
Dim rtn As Long 'ตัวแปรสำหรับเก็บค่าที่ส่งคืนมาจากฟังก์ชัน Len ( )
   name = "Suphachai Somphanit" 'กำหนดข้อความให้กับตัวแปร
rtn = Len(name)
   Label1.Caption = rtn 'แสดงค่าที่ได้ โดยใช้คอนโทรล Label มีค่าเท่ากับ 19
End Sub

clip_image002[2]

จากตัวอย่างเป็นการหาขนาดโดยผ่านตัวแปร name  คุณอย่าใส่เครื่องหมาย " " ที่ตัวแปร name เด็ดขาด เพราะจะเป็นการหาขนาดตัวแปร name

ดังตัวอย่างต่อไปนี้

Private Sub Form_Load()
Dim name As String
Dim rtn As Long
   name = "Suphachai Somphanit"
rtn = Len("name")
   Label1.Caption = rtn
End Sub

ตัวอย่างนี้จะคืนค่าเท่ากับ 4 จะเห็นได้ว่า ค่าที่ได้ผิดทันที เพราะเป็นการหาขนาดของตัวแปร name ซึ่งมี 4 ตัวอักษร แต่ถ้าคุณต้องการหาขนาดโดยตรง คุณต้องใส่เครื่องหมาย " " ด้วย เช่น

Private Sub Form_Load()
Dim rtn As Long
rtn = Len("Suphachai Somphanit")
   Label1.Caption = rtn
End Sub

ตัวอย่างนี้จะคืนค่าเท่ากับ 19 ซึ่งเป็นค่าที่ถูกต้อง

  • ฟังก์ชัน StrConv

หน้าที่ใช้สำหรับแปลงข้อมูลชนิด String ให้อยู่ในรูปแบบที่เราสามารถกำหนดได้
รูปแบบการใช้งาน

StrConv(string,conversion )

ตัวแปร string หมายถึง ข้อความ string ที่คุณต้องการแปลง
ตัวแปร conversion หมายถึง ตัวแปรที่กำหนดรูปแบบการแปลง string ซึ่งคุณสามารถกำหนดได้ดังนี้

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbUpperCase

1

แปลงตัวอักษรให้เป็นตัวพิมพ์ใหญ่ทั้งหมด

vbLowerCase

2

แปลงตัวอักษรให้เป็นตัวพิมพ์เล็กทั้งหมด

vbProperCase

3

แปลงเฉพาะอักษรตัวแรก ของทุกๆ คำทั้งหมด ให้เป็นตัวพิมพ์ใหญ่

vbWide*

4*

แปลงตัวอักษรชนิด 1 ไบต์ ให้เป็น 2 ไบต์

vbNarrow*

8*

แปลงตัวอักษรชนิด 2 ไบต์ ให้เป็น 1 ไบต์

vbKatakana**

16**

แปลงอักษรแบบ Hirakana ให้เป็นอักษรแบบ Katakana

vbHiragana**

32**

แปลงอักษรแบบ   Katakana ให้เป็นอักษรแบบ  Hiragana

vbUnicode

64

แปลงรูปแบบการจัดเก็บตัวอักษร ให้จัดเก็บอยู่ในรูปแบบ Unicode

vbFromUnicode

128

แปลงรูปแบบการจัดเก็บจากแบบ Unicode ให้เป็นรูปแบบจัดเก็บเดียวกับระบบที่ใช้อยู่

*ใช้กับอักษรของภาษาอาหรับเท่านั้น
**ใช้กับอักษรของภาษาญี่ปุ่นเท่านั้น

ค่าที่ส่งกลับ เป็นข้อมูลชนิด String
ตัวอย่างการใช้งาน

Private Sub Form_Activate()
   Dim FirstName As String 'ตัวแปรเก็บชื่อ
   Dim LastName As String  'ตัวแปรเก็บนามสกุล
   Dim rtn As String 'ตัวแปรรับค่าส่งกลับ
   Dim rtn2 As String 'ตัวแปรรับค่าส่งกลับ
   FirstName = "suphachai" 'กำหนดค่าให้กับตัวแปร FristName
   LastName = "somphanit"  'กำหนดค่าให้กับตัวแปร LastName
   rtn = StrConv(FirstName, 1) 'แปลงให้เป็นตัวใหญ่ทั้งหมด
   rtn2 = StrConv(LastName, 3) 'แปลงเฉพาะอักษรตัวแรก
   Print rtn
   Print rtn2
End Sub

จากตัวอย่างจะเห็นได้ว่า คำว่า suphachai จะถูกแปลงเป็นตัวพิมพ์ใหญ่ทั้งหมด ส่วนคำว่า somphanit ตัว s จะถูกแปลงเป็นตัวใหญ่ เพืยงตัวเดียวเท่านั้น

  • ฟังก์ชัน Trim ( ), LTrim ( ) และฟังก์ชัน RTrim ( )

หน้าที่ใช้สำหรับตัดช่องว่างใน String โดยที่

  • ฟังก์ชัน Trim ( ) ใช้สำหรับตัดช่องว่างด้านซ้ายและด้านขวาของข้อความ String ซึ่งก็จะทำให้เหลือเฉพาะแต่ข้อความล้วนๆ
  • ฟังก์ชัน RTrim ( ) ใช้สำหรับตัดช่องว่างด้านขวาเพียงด้านเดียว
  • ฟังก์ชัน LTrim ( ) ใช้สำหรับตัดช่องว่างด้านซ้ายเพียงด้านเดียว

รูปแบบการใช้งาน

LTrim(string )
RTrim(string )
Trim(string )

ตัวแปร string หมายถึง ข้อความที่คุณต้องการตัดช่องว่าง

ค่าที่ส่งกลับ ข้อมูลชนิด String แยกออกได้ 3 กรณี คือ

  • ฟังก์ชัน Trim ( ) คืนค่าเป็นข้อความที่ถูกตัดช่องว่างทั้ง 2 ด้านแล้ว
  • ฟังก์ชัน RTrim ( ) คืนค่าเป็นข้อความที่ถูกตัดช่องว่างเฉพาะด้านขวา
  • ฟังก์ชัน LTrim ( ) คืนค่าเป็นข้อความที่ถูกตัดช่องว่างเฉพาะด้านซ้าย

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

Dim testString, rtnString
testString = "    Hello World     " 'กำหนดข้อความทดสอบ
rtnString = LTrim(testString) ' ตัดช่องว่างทางซ้ายออก คืนค่า "Hello World     "
rtnString = RTrim(testString) ' ตัดช่องว่างทางขวาออก คืนค่า "      Hello World"
rtnString = Trim(testString) ' ตัดช่องว่างทั้ง 2 ด้าน คืนค่า "Hello World"

กลุ่มคำสั่งและฟังก์ชันที่เกี่ยวกับอาร์เรย์

สำหรับคำสั่งและฟังก์ชันในกลุ่มนี้ คุณจะได้ใช้งานบ่อยมากที่สุดอีกกลุ่มหนึ่ง ประกอบด้วยคำสั่งและฟังก์ชัน ดังนี้

  • คำสั่ง Erase
  • ฟังก์ชัน LBound และ UBound
  • คำสั่ง Option Base
  • คำสั่ง ReDim

สำหรับรายละเอียดของแต่ละคำสั่งและฟังก์ชันมีดังนี้

  • คำสั่ง Erase

หน้าที่ คำสั่ง Erase จะใช้สำหรับ กำหนดค่าตัวแปรอาร์เรย์ชนิดสแตติก ให้กลายเป็นค่าเริ่มต้นใหม่ รวมถึงคืนหน่วยความจำให้กับระบบ เมื่อคุณใช้งานตัวแปรอาร์เรย์แบบไดนามิก
รูปแบบการใช้งาน

Erase arraylist

ตัวแปร arraylist หมายถึง ชื่อของตัวแปรอาร์เรย์ ที่คุณต้องการกำหนดค่าใหม่ หรือต้องการลบตัวแปรอาร์เรย์ เพื่อคืนหน่วยความจำให้กับระบบ

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

รูปแบบการประกาศ

ผลที่ได้

Dim intStd(20) As Integer          'ประกาศตัวแปรอาร์เรย์แบบสแตติก ชนิด Integer

Erase intStd   ' มีผลทำให้ตัวแปรอาร์เรย์แต่ละตัวมีค่าเท่ากับ 0

Dim intTmp() As Integer          'ประกาศตัวแปรอาร์เรย์แบบไดนามิก ชนิด Integer

Erase intTmp ' เป็นการคืนหน่วยความจำให้กับระบบ

Dim strName(15) As String             'ประกาศตัวแปรอาร์เรย์แบบสแตติก ชนิด String ที่มีความยาวไม่จำกัด

Erase strName   'มีผลทำให้ตัวแปรอาร์เรย์สตริงแต่ละตัว เท่ากับสตริงว่าง " "

Dim strPassword(8) As String * 10 'ประกาศตัวแปรอาร์เรย์แบบสแตติก ชนิด String ที่จำกัดความยาว 9 ตัวอักษร

Erase strPassword 'ทำให้ตัวแปรอาร์เรย์แต่ละตัวมีค่าเท่ากับ 0

Dim varMisc(10) As Variant        'ประกาศตัวแปรอาร์เรย์แบบสแตติก ชนิด Variant

Erase VarArray 'ทำให้ตัวแปรอาร์เรย์แต่ละตัวมีค่าเท่ากับ Empty

  • ฟังก์ชัน LBound ( ) และ UBound ( )

หน้าที่และค่าที่ส่งกลับ ฟังก์ชัน LBound มีหน้าที่รายงานค่าของตัวแปรอาร์เรย์ ซึ่งเป็นค่าขอบเขตล่าง ส่วนฟังก์ชัน UBound มีหน้าที่รายงานค่าตัวแปรอาร์เรย์ ซึ่งเป็นค่าขอบเขตบน
รูปแบบการใช้งาน

LBound(arrayname [,dimension ])
UBound(arrayname [,dimension ])

ตัวแปร arrayname หมายถึง ชื่อของตัวแปรอาร์เรย์ ที่คุณต้องการค้นหาขอบเขตบน หรือขอบเขตล่าง
ตัวแปร dimension หมายถึง มิติของอาร์เรย์ ใช้ในกรณีที่ตัวแปรอาร์เรย์มีตั้งแต่ 2 มิติขึ้นไป ถ้าคุณไม่กำหนด ค่า default คือ แบบ 1 มิติ
ตัวอย่างการใช้งาน

Dim x(1 To 50, 5  To 10, -10 To 20)

ฟังก์ชัน

ค่าที่ส่งกลับมา

LBound(x, 1)

1

UBound(x, 1)

50

LBound(x, 2)

5

UBound(x, 2)

10

LBound(x, 3)

-10

UBound(x, 3)

20

  • คำสั่ง Option Base

หน้าที่ ใช้สำหรับกำหนดค่าขอบเขตล่าง ของตัวแปรอาร์เรย์
รูปแบบการใช้งาน

Option Base {0 | 1}

ข้อแนะนำในการใช้งาน โดยปกติแล้ว ตัวแปรอาร์เรย์ลำดับแรก จะมีค่าเป็น 0 แต่ด้วยคำสั่งนี้ คุณสามารถกำหนดให้ตัวแปรอาร์เรย์ เริ่มต้นที่ 1 ได้ ในการใช้งานคำสั่งนี้ คุณต้องประกาศคำสั่ง Option Base นี้ในระดับ Module เท่านั้น และจะต้องประกาศก่อนที่จะมีการใช้งาน ตัวแปรอาร์เรย์ใดๆ เสมอ โดยที่ใน 1 โปรเจ็กต์ คุณสามารถกำหนดได้เพียงครั้งเดียวเท่านั้น

  • คำสั่ง ReDim

หน้าที่ ใช้สำหรับเปลี่ยนแปลงจำนวนสมาชิกของตัวแปรอาร์เรย์ ในขณะรัน
รูปแบบการใช้งาน

ReDim [Preserve] varname (subscripts ) [As type ] [, varname (subscripts ) [As type ]] . . .

ตัวแปร Preserve หมายถึง เมื่อเปลี่ยนแปลงขนาดของตัวแปรอาร์เรย์แล้ว VB ยังคงเก็บรักษาค่าของตัวแปรดังกล่าว ไว้คงเดิม
ตัวแปร varname หมายถึง ชื่อของตัวแปรอาร์เรย์
ตัวแปร subscripts หมายถึง เลขจำนวนเต็ม ซึ่งใช้สำหรับกำหนดประเภทของตัวแปรอาร์เรย์ว่า จะเป็นแบบสแตติก หรือแบบไดนามิก
ตัวแปร As type หมายถึง ชนิดข้อมูลของตัวแปรอาร์เรย์แต่ละตัว เช่น Integer, Long, Single เป็นต้น

ข้อควรระวัง เนื่องจากว่าคำสั่ง ReDim มีความสามารถเพียง เปลี่ยนแปลงจำนวนสมาชิกในตัวแปรอาร์เรย์เท่านั้น ไม่สามารถเปลี่ยนแปลงชนิดข้อมูล ของตัวแปรอาร์เรย์แต่ละตัวได้

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

Option Explicit
Dim intMember() As Integer
Private Sub Form_Load()
    ReDim intMember(9) As Integer
    ...
End Sub

ตัวอย่างนี้เป็นการเปลี่ยนแปลง ตัวแปรอาร์เรย์ intMember ( ) แบบไดนามิก ให้กลายเป็นตัวแปรอาร์เรย์แบบสแตติก ที่มีจำนวนสมาชิก 10 ตัว แต่ถ้าคุณมีการเปลี่ยนแปลงชนิดของข้อมูล ในตัวแปรอาร์เรย์ ก็จะเกิด error ทันที ดังตัวอย่างโค้ดด้านล่าง

Option Explicit
Dim intMember() As Integer
Private Sub Form_Load()
    ReDim intMember(9) As Long
    ...
End Sub

กลุ่มฟังก์ชันที่เกี่ยวข้องกับตัวแปร Variant

เนื่องจากตัวแปร Variant สามารถเก็บข้อมูลได้ทุกชนิด ฟังก์ชันในกลุ่มนี้ จะมีประโยชน์ ในกรณีที่คุณไม่สามารถหลีกเลี่ยง การใช้งานตัวแปรชนิด Variant ได้ ซึ่งประกอบด้วยกลุ่มของฟังก์ชัน ดังนี้

  • ฟังก์ชัน Istype ( )
  • ฟังก์ชัน TypeName ( )
  • ฟังก์ชัน Vartype ( )

สำหรับรายละเอียดของแต่ละฟังก์ชัน มีดังนี้

  • ฟังก์ชัน Istype ( )

หน้าที่ใช้สำหรับตรวจสอบชนิดของข้อมูล ในตัวแปร Variant ว่าเป็นข้อมูลชนิดใด
รูปแบบการใช้งาน

IsArray(varname )
IsDate(expression )
IsEmpty(expression )
IsError(expression )
IsMissing(argname )
IsNull(expression )
IsNumeric(expression )
IsObject(identifier )
ตัวแปร varname, expression, argname และ identifier หมายถึง ตัวแปร Variant ที่คุณต้องการตรวจสอบ

ค่าที่ส่งกลับ เป็นค่า Boolean ซึ่งมีความหมายดังนี้

ค่าที่ได้

ความหมาย

True

หมายถึง ตัวแปร Variant เก็บข้อมูลชนิดเดียวกับฟังก์ชัน ที่คุณใช้ตรวจสอบ

False

หมายถึง ตัวแปร Variant ไม่ได้เก็บข้อมูลชนิดเดียวกับฟังก์ชัน ที่คุณใช้ตรวจสอบ

ข้อแนะนำในการใช้งาน เนื่องจากว่า ตัวแปร Variant สามารถเก็บข้อมูลได้ทุกชนิด ฟังก์ชันนี้จึงมีประโยชน์ ในกรณีที่คุณต้องการตรวจสอบว่า ตัวแปร Variant  ดังกล่าว เก็บข้อมูลชนิดใดอยู่

  • ฟังก์ชัน TypeName ( )

หน้าที่ ใช้สำหรับรายงานข้อมูลของตัวแปร Variant
รูปแบบการใช้งาน

TypeName(varname )

ตัวแปร varname หมายถึง ตัวแปร Variant ที่คุณต้องการตรวจสอบ

ค่าที่ส่งกลับ สตริง ซึ่งเป็นข้อมูลที่เกี่ยวข้องกับตัวแปร Variant ซึ่งมีรายละเอียดดังนี้

ค่าที่ส่งกลับมา

ความหมาย

ชื่อของอ๊อบเจ็กต์ใดๆ

ตัวแปรนั้นๆ เก็บอ๊อบเจ็กต์ดังกล่าวอยู่

Byte

ข้อมูลชนิด Byte

Integer

ข้อมูลชนิด Integer

Long

ข้อมูลชนิด Long

Single

ข้อมูลชนิด Single

Double

ข้อมูลชนิด Double

Currency

ข้อมูลชนิด Currency

Decimal

ข้อมูลชนิด Decimal

Date

ข้อมูลชนิด Date

String

ข้อมูลชนิด String

Boolean

ข้อมูลชนิด Boolean

Error

ข้อมูลชนิด error

Empty

เป็นข้อมูลที่ยังไม่เคยกำหนดค่าเริ่มต้นมาก่อน

Null

ตัวแปรนั้นๆ ไม่ได้จัดเก็บข้อมูลใดๆ

Object

ข้อมูลชนิดอ๊อบเจ็กต์

Unknown

ไม่ทราบชนิดของข้อมูล

Nothing

เป็นตัวแปรอ๊อบเจ็กต์ ซึ่งไม่ได้อ้างอิงถึงอ๊อบเจ็กต์ใดๆ

ข้อแนะนำในการใช้งาน เนื่องจากว่า หน้าที่ของฟังก์ชันนี้ จะมีลักษณะคล้ายกับฟังก์ชัน Istype ( ) ต่างกันตรงที่ ฟังก์ชัน TypeName ( ) คุณจะใช้เมื่อ ต้องการทราบเพียงอย่างเดียวว่า ตัวแปร Variant เก็บข้อมูลชนิดใดอยู่ เป็นการตรวจสอบเบื้องต้นเท่านั้น ส่วนฟังก์ชัน Istype ( ) จะใช้เมื่อ คุณต้องการทราบว่า ตัวแปร Variant เก็บข้อมูลชนิดใดเช่นกัน แต่ตัวแปรดังกล่าว คุณต้องการตรวจสอบให้แน่ชัด หรือต้องการแปลงข้อมูลจากชนิด Variant ไปเป็นชนิดอื่นๆ จะเห็นได้ว่า การตรวจสอบตัวแปร Variant ด้วยฟังก์ชัน Istype ( ) จะมีความละเอียด และเน้นการตรวจสอบที่ชัดเจนมากกว่า

ถ้าตัวแปรที่นำมาตรวจสอบ เป็นตัวแปรอาร์เรย์ ฟังก์ชัน TypeName ( ) จะคืนค่าเป็น ชนิดของข้อมูลนั้นๆ เหมือนกับตารางด้านบน และจะเติม ( ) ต่อท้าย ซึ่งมีความหมายว่า เป็นตัวแปรอาร์เรย์ชนิดนั้นๆ เช่น  intStd ( ) As Integer เมื่อคุณนำมาตรวจสอบด้วยฟังก์ชัน TypeName ( intStd) ค่าที่คุณได้จากฟังก์ชันนี้คือ Integer ( ) เป็นต้น

  • ฟังก์ชัน VarType ( )

หน้าที่ ใช้สำหรับตรวจสอบตัวแปรชนิด Variant ว่า ตัวแปรดังกล่าวเก็บข้อมูลชนิดใด เนื่องจากว่า ตัวแปรชนิด Variant สามารถทดแทนข้อมูลได้ทุกชนิด เราสามารถใช้ฟังก์ชันนี้ เพื่อตรวจสอบชนิดของข้อมูลที่ถูกจัดเก็บอยู่ในตัวแปร Variant ได้
รูปแบบการใช้งาน

VarType (expression )

ตัวแปร expression หมายถึง ตัวแปร Variant ที่คุณต้องการตรวจสอบ
ค่าที่ส่งกลับ เป็นเลขจำนวนเต็ม Integer ซึ่งมีความหมายดังนี้

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbEmpty

0

Empty หมายถึง เป็นตัวแปร Variant ที่คุณยังไม่ได้กำหนดค่าอะไรให้กับตัวแปรเลย

vbNull

1

Null หมายถึงไม่มีข้อมูล

vbInteger

2

ข้อมูลชนิด Integer

vbLong

3

ข้อมูลชนิด Long

vbSingle

4

ข้อมูลชนิด Single

vbDouble

5

ข้อมูลชนิด Double

vbCurrency

6

ข้อมูลชนิด Currency

vbDate

7

ข้อมูลชนิด Date

vbString

8

ข้อมูลชนิด String

vbObject

9

ข้อมูลชนิด Object

vbError

10

ข้อมูลชนิด Error

vbBoolean

11

ข้อมูลชนิด Boolean

vbVariant

12

ข้อมูลชนิด Variant (ใช้กับอาร์เรย์ของ  variants เท่านั้น )

vbDataObject

13

ข้อมูลชนิด  data access object

vbDecimal

14

ข้อมูลชนิด Decimal

vbByte

17

ข้อมูลชนิด Byte

vbUserDefinedType

36

ตัวแปรดังกล่าว เก็บข้อมูลชนิดที่ผู้ใช้กำหนดขึ้นเอง (user-defined types)

vbArray

8192

ข้อมูลชนิด Array

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

Private Sub Form_Activate()
   Dim A As Variant 'กำหนดให้ตัวแปร A เป็นข้อมูลชนิด Variant
   Print "A is:"; VarType(A) 'แสดงค่า A ที่ฟอร์ม
   A = 3 'กำหนดค่า A
   Print "A is:"; VarType(A) 'แสดงค่า A ที่ฟอร์ม
   A = 32769 'กำหนดค่า A
   Print "A is:"; VarType(A) 'แสดงค่า A ที่ฟอร์ม
   A = True
   Print "A is:"; VarType(A)
   A = 1234.9999
   Print "A is:"; VarType(A)
   A = #7/25/1999 10:00:00 PM#
   Print "A is:"; VarType(A)
   A = "Suphachai Somphanit"
   Print "A is:"; VarType(A)
End Sub

จากตัวอย่าง ผู้เขียนสมมติให้ตัวแปร A เป็นข้อมูลชนิด Variant แล้วจึงค่อยกำหนดให้ตัวแปร A เก็บค่าต่างๆ กัน จากนั้นจึงใช้ฟังก์ชัน VarType ( ) เพื่อตรวจสอบชนิดของตัวแปร A แล้วแสดงออกมาที่ฟอร์ม ให้ผู้อ่านสังเกตค่าที่ผู้เขียนกำหนดขึ้นมา ประกอบกับผลที่เกิดขึ้นด้วย

กลุ่มฟังก์ชันที่เกี่ยวข้องกับการแปลงชนิดของข้อมูล

สิ่งหนึ่งที่คุณจะพบได้เสมอ ในการเขียนโปรแกรม ก็คือ การแปลงชนิดของข้อมูลจากชนิดหนึ่ง ไปสู่อีกชนิดหนึ่ง บ่อยครั้งข้อมูลที่ input เข้ามา มักจะไม่ตรงกับความต้องการของคุณ ฟังก์ชันกลุ่มนี้ เป็นอีกกลุ่มหนึ่งที่คุณต้องใช้งาน และทำความเข้าใจเป็นอย่างยิ่ง เพราะว่า ถ้าคุณแปลงข้อมูลที่เข้ามา ผิด, แตกต่าง หรือไม่ตรงกับที่คุณต้องการ ก็จะส่งผลให้ output หรือข้อมูลที่ออกมา คลาดเคลื่อนจากที่ควรจะเป็น หรืออาจถึงทำงานผิดพลาดเลยก็ได้ ขอให้คุณทำความเข้าใจฟังก์ชันต่างๆ ที่อยู่ในกลุ่มนี้ให้ดี :-)

  • ฟังก์ชัน Asc ( ), Chr ( ) และ Chr$ ( )

หน้าที่ ฟังก์ชัน Asc ( ) ใช้สำหรับแปลงตัวอักษรตัวแรกของข้อมูล ให้เป็นรหัสแอสกี้ ซึ่งมีค่าตั้งแต่ 0-255 ส่วนฟังก์ชัน Chr ( ) ใช้สำหรับแปลงข้อมูลจาก รหัสแอสกี้กลับเป็นตัวอักษร ทั้ง 2 ฟังก์ชัน มีหน้าที่ตรงข้ามกันนั่นเอง
รูปแบบการใช้งาน

Asc (string )
Chr (charcode )
Chr$ (charcode )
ตัวแปร string และ charcode หมายถึง ตัวแปรที่คุณต้องการแปลงค่า

ข้อแตกต่างของฟังก์ชัน Chr ( ) และ Chr$ ( ) คือ ค่าที่ฟังก์ชัน Chr$ ( ) ส่งกลับมา จะเป็นข้อมูลชนิด String ส่วนฟังก์ชัน Chr ( ) ค่าที่ส่งกลับมา จะเป็นชนิด   Variant

  • ฟังก์ชัน CBool ( )

หน้าที่ ใช้สำหรับแปลงข้อมูล ให้เป็นชนิดของข้อมูล Boolean
รูปแบบการใช้งาน

CBool(expression )

ตัวแปร expression หมายถึง ตัวแปร หรือข้อมูลที่คุณต้องการแปลง

ค่าที่ส่งกลับ โดยหน้าที่แล้วจะเป็นข้อมูลชนิดตัวแปร Boolean แต่ก็ขึ้นอยู่กับข้อมูลที่เข้ามาด้วย ดังตารางต่อไปนี้

ชนิดของตัวแปร expression

ค่าที่ได้

ตัวเลขใดๆ (Numeric)

  • กรณีที่เป็นเลข 0 ซึ่งรวมถึงเลขทศนิยมที่ขึ้นต้นด้วย 0.x ด้วย เช่น 0.1, 0.01 เป็นต้น จะถูกแปลงค่าเป็น False
  • ส่วนตัวเลขอื่นๆ ทุกตัว จะถูกแปลงเป็นค่า True

ข้อความ (String)

ถ้าเป็นข้อความที่เป็นตัวอักษรจะ error แต่ถ้าเป็นข้อความที่เป็นตัวเลข จะแยกเป็นกรณีดังนี้

  • กรณีเลข 0 แต่ไม่รวมที่เป็นเลขทศนิยมที่ขึ้นต้นด้วย 0.x จะถูกแปลงค่าเป็น False
  • กรณีตัวเลขอื่นๆ ทุกตัวรวมทั้งเลขทศนิยมที่ขึ้นต้นด้วย 0.x จะถูกแปลงค่าเป็น True ซึ่งจะแตกต่างจากกรณีที่เป็น Numeric

Null

Error

Empty

False

  • ฟังก์ชัน CByte ( )

หน้าที่ ใช้สำหรับแปลงข้อมูล ให้เป็นชนิดของข้อมูล Byte
รูปแบบการใช้งาน

CByte (expression )

ตัวแปร expression หมายถึง ตัวแปร หรือข้อมูลที่คุณต้องการแปลง

ค่าที่ส่งกลับ โดยหน้าที่แล้วจะเป็นข้อมูลชนิดตัวเลข Byte แต่ก็ขึ้นอยู่กับข้อมูลที่เข้ามาด้วย ดังตารางต่อไปนี้

ชนิดของตัวแปร expression

ค่าที่ได้

ตัวเลขใดๆ (Numeric)

แยกได้ 2 กรณี คือ

  • ตัวเลขจำนวนเต็ม ที่อยู่ระหว่าง 0-255 เท่านั้น จึงจะสามารถแปลงค่าได้
  • ถ้าเป็นตัวเลขทศนิยม จะใช้หลักการทางคณิตศาสตร์ เพื่อปัดเศษทศนิยม ขึ้นหรือลงก่อน แล้วจึงแปลงค่า

ค่า Boolean

แยกได้ 2 กรณี คือ

  • True จะแปลงเป็นค่า 255
  • False จะแปลงเป็นค่า 0

ข้อความ (String)

ถ้าเป็นข้อความที่เป็นตัวอักษรจะ error แต่ถ้าเป็นข้อความที่เป็นตัวเลข จะต้องอยู่ระหว่าง 0-255 เท่านั้น

Null

Error

Empty

0

  • ฟังก์ชัน CDate ( )

หน้าที่ ใช้สำหรับแปลงข้อมูล ให้เป็นชนิดของข้อมูล Date
รูปแบบการใช้งาน

CDate (expression )

ตัวแปร expression หมายถึง ตัวแปร หรือข้อมูลที่คุณต้องการแปลง

ค่าที่ส่งกลับ โดยหน้าที่แล้วจะเป็นข้อมูลชนิด Date แต่ก็ขึ้นอยู่กับข้อมูลที่เข้ามาด้วย ดังตารางต่อไปนี้

ชนิดของตัวแปร expression

ค่าที่ได้

ตัวเลขใดๆ (Numeric)

แยกเป็นกรณีได้ดังนี้

  • เลข -65535 จะแปลงค่าเป็น 7/26/1720
  • เลข -255 จะแปลงค่าเป็น 4/19/1899
  • เลข -1 จะแปลงค่าเป็น 12/29/1899
  • **เลข 0 จะแปลงค่าเป็น 12:00:00 AM
  • เลข 1 จะแปลงค่าเป็น 12/31/1899
  • เลข 2 จะแปลงค่าเป็น 1/1/1900
  • เลข 3 จะแปลงค่าเป็น 1/2/1900
  • เลข 255 จะแปลงค่าเป็น 9/11/1900
  • เลข 65535 จะแปลงค่าเป็น 6/4/2079

**สำหรับเลข 0 ผู้เขียนคิดว่า น่าจะเป็น bug ของ VB 6.0 เนื่องจากว่า ควรจะแปลงเป็น 12/30/1899

ค่า Boolean

  • ค่า True จะแปลงค่าเป็น 12/29/1899
  • ค่า False จะแปลงค่าเป็น 12:00:00 AM

ข้อความ (String)

ถ้าเป็นข้อความธรรมดาจะ error จะต้องเป็นข้อความที่มีรูปแบบหรือลักษณะ วันและเวลา เช่น

Private Sub Form_Load()
  Dim a As String
  Dim b As Date
     a = "1/1/1999 12:00:00 PM"
     b = CDate(a)
  Debug.Print b
End Sub

Null

Error

Empty

12:00:00 AM

สามารถมีค่าได้ตั้งแต่วันที่ 1 January 100 ถึงวันที่ 31 December 9999 และเก็บเวลาได้ตั้งแต่ 0:00:00 ถึง 23:59:59

  • ฟังก์ชัน CDbl ( ), CInt ( ), CLng ( ) และ CSng ( )

หน้าที่ ใช้สำหรับแปลงข้อมูล ให้เป็นข้อมูลชนิดเดียวกับฟังก์ชันนั้นๆ โดยมีขอบเขตของข้อมูลเท่ากับข้อมูลชนิดนั้นๆ คือ

  • ฟังก์ชัน CDbl ( ) ใช้แปลงข้อมูลให้เป็นชนิด Double มีขอบเขตดังนี้ ค่าบวกอยู่ระหว่าง 4.94065645841247E-324 ถึง 1.79769313486232E308 ค่าลบอยู่ระหว่าง -1.79769313486232E308 ถึง -4.94065645841247E-324
  • ฟังก์ชัน CLng ( ) ใช้แปลงข้อมูลให้เป็นชนิด Long มีขอบเขตตั้งแต่  -2,147,483,648 ถึง 2,147,483,647
  • ฟังก์ชัน CSng ( ) ใช้แปลงข้อมูลให้เป็นชนิด Single มีขอบเขตดังนี้ ค่าบวกอยู่ระหว่าง 1.401298E-45 ถึง 3.402823E38 และค่าลบอยู่ระหว่าง   -3.402823E38 ถึง -1.401298E-45

รูปแบบการใช้งาน

CDbl (expression )
CInt (expression )
CLng (expression )
CSng (expression )

ตัวแปร expression หมายถึง ตัวแปร หรือข้อมูลที่คุณต้องการแปลง

ค่าที่ส่งกลับ จะขึ้นอยู่กับตัวแปรที่เข้ามา ดังตารางต่อไปนี้

ชนิดของตัวแปร expression

ค่าที่ได้

ตัวเลขใดๆ (Numeric)

จะแปลงเป็นค่าที่เท่ากับค่าเดิม แต่เปลี่ยนจากชนิดของข้อมูลเดิม เป็นข้อมูลชนิดเดียวกับฟังก์ชันที่ใช้

ค่า Boolean

แยกได้ 2 กรณี คือ

  • True จะแปลงเป็นค่า -1
  • False จะแปลงเป็นค่า  0

ข้อความ (String)

ถ้าเป็นข้อความที่เป็นตัวอักษรจะ error แต่ถ้าเป็นข้อความที่เป็นตัวเลข จะแปลงเป็นค่า ที่เท่ากับค่าเดิม แต่เปลี่ยนจากชนิดของข้อมูล String เป็นข้อมูลชนิดเดียวกับฟังก์ชันที่ใช้

Null

Error

Empty

0

  • ฟังก์ชัน CStr ( )

หน้าที่ ใช้สำหรับแปลงข้อมูล ให้เป็นข้อมูลชนิด String
รูปแบบการใช้งาน

CStr (expression )

ตัวแปร expression หมายถึง ตัวแปร หรือข้อมูลที่คุณต้องการแปลง

ค่าที่ส่งกลับ โดยหน้าที่แล้วจะเป็นข้อมูลชนิด String แต่ก็ขึ้นอยู่กับข้อมูลที่เข้ามาด้วย ดังตารางต่อไปนี้

ชนิดของตัวแปร expression

ค่าที่ได้

ตัวเลขใดๆ (Numeric)

จะแปลงเป็นค่าที่เท่ากับค่าเดิม แต่เปลี่ยนจากชนิดของข้อมูลเดิม เป็นข้อมูลชนิด String

ค่า Boolean

จะคงค่าเดิมไว้

Null

Error

Empty

จะแปลงเป็น String ว่าง " "

  • ฟังก์ชัน CVar ( )

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

  • ฟังก์ชัน Str ( ) และฟังก์ชัน Str$ ( )

หน้าที่ ใช้สำหรับแปลงข้อมูลจาก ตัวเลขไปเป็นสตริงตัวเลข กล่าวคือ เป็นการเปลี่ยนสถานะจากชนิดของข้อมูลตัวเลข เช่น Integer, Long, Single etc. ไปเป็นสถานะข้อมูลชนิด String นั่นเอง
รูปแบบการใช้งาน

Str (numeric )

ตัวแปร numeric หมายถึง ตัวเลขใดๆ ที่คุณต้องการแปลง

ข้อแตกต่างของฟังก์ชัน Str ( ) และฟังก์ชัน Str$ ( ) คือ ค่าที่ฟังก์ชัน Str ( ) ส่งกลับจะเป็นข้อมูลชนิด Variant ส่วนฟังก์ชัน Str$ ( ) จะส่งค่ากลับเป็นข้อมูลชนิด String

  • ฟังก์ชัน Val ( )

หน้าที่ แปลงตัวแปร หรือข้อมูล ให้เป็นข้อมูลชนิดตัวเลขจำนวนจริง Double
รูปแบบการใช้งาน

Val (string )

ตัวแปร string หมายถึง ตัวแปร หรือข้อมูลที่คุณต้องการแปลงค่า

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

ค่าของตัวแปร string

ค่าที่ได้

ตัวเลขใดๆ (numeric)

จะได้ตัวเลขเดิม แต่เปลี่ยนจากข้อมูลชนิดเดิม เป็นข้อมูลชนิด Double

ข้อความ (String)

แยกได้ 2 กรณี

  • **ข้อความที่เป็นตัวอักษรใดๆ จะได้ค่า 0
  • ข้อความที่เป็นตัวเลข จะได้ตัวเลขดังกล่าว แต่เปลี่ยนจากข้อมูลชนิด String เป็นข้อมูลชนิด Double

ค่า Boolean

แยกได้ 2 กรณี

  • **True จะได้ค่า 0
  • **False จะได้ค่า 0

Null

Error

Empty

0

** ผู้เขียนคิดว่า น่าจะเป็น bug ของ VB 6.0 กรณีแรก ควรที่จะแปลงอักษรตัวแรกของข้อความที่เข้ามา ให้เป็นเลขจำนวนเต็มบวก Double ที่มีค่าเท่ากับ รหัส ASCII ของตัวอักษรนั้นๆ ไม่ใช่แปลงเป็น 0 ทั้งหมด ส่วนกรณีที่ 2 ค่า Boolean ควรที่จะแปลงค่า False เป็น 0 และแปลงค่า True ให้เป็น -1

ข้อแนะนำในการใช้งาน ฟังก์ชันนี้มักจะใช้ควบคู่กับคอนโทรล TextBox เสมอ เนื่องจากคอนโทรล TextBox เป็นคอนโทรลที่ผู้ใช้สามารถ Input ข้อมูลต่างๆ เข้ามาได้ สมมติว่า ผู้ใช้ป้อนตัวเลขเข้ามา ตัวเลขดังกล่าวจะถูกเก็บไว้ที่คุณสมบัติ Text ซึ่งเป็นตัวเลขที่มีสถานะเป็น String ทำให้ไม่สามารถนำไปประมวล ทางคณิตศาสตร์ได้อย่างเต็มรูปแบบ ฟังก์ชันนี้จะทำหน้าที่ แปลงข้อมูลตัวเลข (ที่อยู่ในฐานะ String) ให้กลายเป็นตัวเลข (ที่อยู่ในฐานะตัวเลข Double)
ตัวอย่างในการใช้งาน

Dim Test As String
Test = Val("1234") 'คืนค่า 1234
Test = Val(" 1  2  3  4") ' คืนค่า 1234
Test = Val("12 and 34") ' คืนค่า 12

'ผู้ใช้ป้อนค่า 12345 เข้ามาในคอนโทรล TextBox
Test = Val(Text1.Text) ' คืนค่า 12345

กลุ่มฟังก์ชันสำหรับสร้างกรอบโต้ตอบผู้ใช้

  • ฟังก์ชัน MsgBox ( ) และคำสั่ง MsgBox

หน้าที่ ใช้สำหรับสร้างกรอบโต้ตอบกับผู้ใช้ แบบเมสเสจบ๊อกซ์ หมายถึง กรอบโต้ตอบที่แสดงข้อมูลเพียงอย่างเดียว แล้วให้ผู้ใช้คลิ๊กเลือก เพื่อตอบรับหรือไม่ เช่น แมสเสจบ๊อกซ์ที่เตือนให้ผู้ใช้เซฟงานใน Word 2000 หรืออื่นๆ เป็นต้น
รูปแบบการใช้งาน

MsgBox(prompt   [, buttons ] [, title ] [, helpfile, context  ])
MsgBox prompt   [, buttons ] [, title ] [, helpfile, context  ]

ตัวแปร prompt ข้อความที่คุณต้องการแสดงในแมสเสจบ๊อกซ์ ในกรณีที่คุณต้องการแสดงข้อความมากกว่า 1 บรรทัดในแมสเสจบ๊อกซ์ ให้คุณใช้อักขระ Chr(13) & Chr(10) ต่อท้ายข้อความ เพื่อให้ข้อความต่อไป ขึ้นบรรทัดใหม่

ตัวแปร buttons หมายถึง เลขจำนวนเต็ม Integer ใช้สำหรับกำหนดปุ่ม, ไอคอน และรูปแบบ ที่คุณต้องการแสดงในแมสเสจบ๊อกซ์ โดยแยกออกเป็น 5 กลุ่มใหญ่ๆ และจะใช้เครื่องหมาย + เพื่อแยกกลุ่มต่างๆ ออกจากกัน ซึ่งสามารถมีค่าได้ดังนี้

กลุ่มที่ใช้สำหรับกำหนดปุ่ม ที่จะแสดงในแมสเสจบ๊อกซ์

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbOKOnly

0

แสดงปุ่ม OK ปุ่มเดียว

vbOKCancel

1

แสดงปุ่ม OK และปุ่ม Cancel

vbAbortRetryIgnore

2

แสดงปุ่ม Abort, Retry, และ Ignore

vbYesNoCancel

3

แสดงปุ่ม  Yes, No, และ Cancel

vbYesNo

4

แสดงปุ่ม Yes และ   No

vbRetryCancel

5

แสดงปุ่ม Retry และ Cancel

กลุ่มที่ใช้สำหรับกำหนดไอคอน ที่จะแสดงในแมสเสจบ๊อกซ์

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbCritical

16

แสดงไอคอน Critical Message

vbQuestion

32

แสดงไอคอน Warning Query

vbExclamation

48

แสดงไอคอน Warning Message

vbInformation

64

แสดงไอคอน Information Message

กลุ่มที่ใช้สำหรับกำหนดปุ่ม Default

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbDefaultButton1

0

กำหนดให้ปุ่มแรก เป็นปุ่ม Default

vbDefaultButton2

256

กำหนดให้ปุ่มที่ 2 เป็นปุ่ม Default

vbDefaultButton3

512

กำหนดให้ปุ่มที่ 3 เป็นปุ่ม Default

vbDefaultButton4

768

กำหนดให้ปุ่มที่ 4 เป็นปุ่ม Default

กลุ่มที่ใช้กำหนดรูปแบบของแมสเสจบ๊อกซ์

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbApplicationModal

0

กำหนดให้แสดงแมสเสจบ๊อกซ์แบบ Application modal หมายถึง ผู้ใช้ไม่จำเป็นที่จะต้องตอบสนองแมสเสจบ๊อกซ์นี้ ก็สามารถสลับ ไปทำอย่างอื่นก่อนก็ได้

vbSystemModal

4096

กำหนดให้แสดงแมสเสจบ๊อกซ์แบบ System modal หมายถึง ผู้ใช้จะต้อง คลิ๊กเลือกปุ่มใดปุ่มหนึ่ง เพื่อตอบสนองในแมสเสจบ๊อกซ์ก่อนเท่านั้น จึงจะสามารถกระทำอย่างอื่นต่อไปได้

กลุ่มที่ใช้สำหรับกำหนดลักษณะพิเศษของแมสเสจบ๊อกซ์

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbMsgBoxHelpButton

16384

เพิ่มปุ่ม Help เข้าไปในแมสเสจบ๊อกซ์

VbMsgBoxSetForeground

65536

กำหนดให้แมสเสจบ๊อกซ์ แสดงส่วนบนตลอดเวลา

vbMsgBoxRight

524288

ข้อความชิดขวาตลอดเวลา ซึ่งจะใช้กับภาษา Hebrew และ  Arabic

vbMsgBoxRtlReading

1048576

กำหนดให้ข้อความที่ปรากฎออกมา มีลักษณะอ่านจากขวาไปซ้าย ซึ่งจะใช้ในภาษา Hebrew และ  Arabic

ข้อแตกต่างของฟังก์ชัน MsgBox ( ) และคำสั่ง MsgBox คือ ถ้าคุณใช้งานในลักษณะของคำสั่ง MsgBox หมายถึง จะไม่มีการส่งค่าใดๆ กลับมา แต่ถ้าคุณใช้งานในลักษณะฟังก์ชัน MsgBox ( ) ก็จะมีการส่งค่ากลับมา 1 ค่า ซึ่งก็คือ ค่าประจำปุ่มที่ผู้ใช้คลิ๊กเลือกในแมสเสจบ๊อกซ์นั่นเอง คุณจะต้องนำค่านี้ ไปเป็นเงื่อนไขในการประมวลผลต่อไป สำหรับค่าที่ส่งกลับมา มีความหมายดังนี้

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbOK

1

หมายถึง ผู้ใช้คลิ๊กปุ่ม OK

vbCancel

2

หมายถึง ผู้ใช้คลิ๊กปุ่ม Cancel

vbAbort

3

หมายถึง ผู้ใช้คลิ๊กปุ่ม Abort

vbRetry

4

หมายถึง ผู้ใช้คลิ๊กปุ่ม Retry

vbIgnore

5

หมายถึง ผู้ใช้คลิ๊กปุ่ม Ignore

vbYes

6

หมายถึง ผู้ใช้คลิ๊กปุ่ม Yes

vbNo

7

หมายถึง ผู้ใช้คลิ๊กปุ่ม No

ตัวแปร title หมายถึง ข้อความที่คุณต้องการแสดงบนแถบไตเติ้ลบาร์ของแมสเสจบ๊อกซ์
สำหรับตัวแปร helpfile และ context หมายถึง การอ้างอิงระบบไฟล์ช่วยเหลือ ซึ่งมีนามสกุล *.hlp โดยคุณต้องกำหนดหมายเลข context ในตัวแปร helpfile และรายละเอียดประจำหัวข้อในตัวแปร context

  • ฟังก์ชัน InputBox ( ) และคำสั่ง InputBox

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

InputBox(prompt   [, title ] [, default  ] [, xpos ] [, ypos ] [, helpfile, context  ])

ตัวแปร prompt หมายถึง ข้อความที่คุณต้องการแสดงในอินพุตบ๊อกซ์ ในกรณีที่คุณต้องการแสดงข้อความมากกว่า 1 บรรทัดในอินพุตบ๊อกซ์ ให้คุณใช้อักขระ Chr(13) & Chr(10) ต่อท้ายข้อความ เพื่อให้ข้อความต่อไป ขึ้นบรรทัดใหม่

ตัวแปร title หมายถึง ข้อความที่คุณต้องการแสดงบนแถบไตเติ้ลบาร์ของอินพุตบ๊อกซ์

ตัวแปร default หมายถึง ข้อความที่คุณกำหนดให้แสดงขึ้นมา ในช่องกรอกข้อความโดยอัตโนมัติ เมื่ออินพุตบ๊อกซ์ปรากฎขึ้นมา

ตัวแปร xpos และ ypos หมายถึง ตำแหน่งของอินพุตบ๊อกซ์เมื่อปรากฎขึ้นมาบนจอภาพ โดยวัดแบบคู่ลำดับ co-ordinate มีหน่วยเป็น twip (หรือขึ้นอยู่กับคุณสมบัติ ScaleMode ของฟอร์ม) ซึ่งวัดจากมุมซ้ายบนของอินพุตบ๊อกซ์ กับมุมซ้ายบนของจอภาพ ถ้าคุณไม่กำหนด อินพุตบ๊อกซ์จะปรากฎตรงตำแหน่งกึ่งกลางจอภาพ

สำหรับตัวแปร helpfile และ context หมายถึง การอ้างอิงระบบไฟล์ช่วยเหลือ ซึ่งมีนามสกุล *.hlp โดยคุณต้องกำหนดหมายเลข context ในตัวแปร helpfile และรายละเอียดประจำหัวข้อในตัวแปร context

กลุ่มฟังก์ชันและคำสั่งอื่นๆ ที่น่าสนใจ

กลุ่มฟังก์ชันและคำสั่งที่ถูกจัดอยู่ในกลุ่มนี้ ผู้เขียนไม่สามารถจัดลงกลุ่มอื่นๆ ได้ จึงรวบรวมมาอยู่ในส่วนนี้

  • ฟังก์ชัน Format ( ) และ Format$ ( )

หน้าที่ ใช้สำหรับจัดรูปแบบตัวแปร หรือข้อมูล โดยเฉพาะตัวแปร หรือข้อมูลที่เป็นตัวเลข, วันและเวลา
รูปแบบการใช้งาน

Format(expression [, format  [, firstdayofweek  [, firstweekofyear  ]]])

ตัวแปร expression หมายถึง ตัวแปรหรือข้อมูลที่คุณต้องการจัดรูปแบบ
ตัวแปร format หมายถึง ตัวแปรที่กำหนดรูปแบบให้กับข้อมูลที่ต้องการจัด ซึ่งสามารถกำหนดค่าได้ดังนี้

ตัวอักขระ

ความหมาย

0

จัดรูปแบบโดยการเติมเลข 0 เพิ่มลงไปในข้อมูล (โดยที่ค่าไม่เปลี่ยนแปลง) ให้เท่ากับจำนวนเลข 0 ที่คุณกำหนดไว้

#

จัดรูปแบบโดยการบังคับให้ข้อมูล หรือตัวแปร มีจำนวนหลักเท่ากับเครื่องหมาย # ถ้าข้อมูลมีจำนวนหลักน้อยกว่า เครื่องหมาย # ก็จะเว้นช่องว่างไว้ เพื่อให้ข้อมูลมีจำนวนหลักเท่ากับเครื่องหมาย #

%

จัดรูปแบบโดยการคำนวณข้อมูลเป็นเปอร์เซนต์ก่อน แล้วจึงแสดงข้อมูลออกมามีเครื่องหมาย % ต่อท้ายข้อมูลดังกล่าวด้วย

,

ใช้จัดรูปแบบข้อมูลที่เป็นตัวเลข โดยแสดงเครื่องหมาย , แบ่งตำแหน่งตัวเลขครั้งละ 3 ตำแหน่ง

:

ใช้จัดรูปแบบข้อมูลที่เป็นเวลา เป็นตัวคั่นระหว่างหน่วยเวลาดังนี้ ชั่วโมง:นาที:วินาที

/

ใช้จัดข้อมูลที่เป็นวันที่ เป็นตัวคั่นระหว่างหน่วยวันดังนี้ วันที่/เดือน/ปี

ตัวแปร firstdayofweek หมายถึง กำหนดให้วันใดวันหนึ่งในสัปดาห์ เป็นวันเริ่มต้น หรือเป็นวันแรก ซึ่งมีค่าได้ดังนี้

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbUseSystem

0

ใช้ค่าที่กำหนดใน NLS API

VbSunday

1

(default) วันอาทิตย์

vbMonday

2

วันจันทร์

vbTuesday

3

วันอังคาร

vbWednesday

4

วันพุธ

vbThursday

5

วันพฤหัสบดี

vbFriday

6

วันศุกร์

vbSaturday

7

วันเสาร์

ตัวแปร firstweekofyear หมายถึง กำหนดให้สัปดาห์ใดสัปดาห์หนึ่ง เป็นสัปดาห์แรกของปี มีค่าได้ดังนี้

ค่าคงที่

ค่าตัวเลข

รายละเอียด

vbUseSystem

0

ใช้ค่าที่กำหนดใน NLS API

vbFirstJan1

1

(default) โดยใช้สัปดาห์แรกของเดือนมกราคม (วันที่ 1 มกราคม)

vbFirstFourDays

2

กำหนดให้ใช้สัปดาห์แรก ที่มีจำนวนวันใน 1 สัปดาห์อย่างน้อยที่สุด 4 วัน

vbFirstFullWeek

3

กำหนดให้ใช้สัปดาห์แรก ที่มีจำนวนวันใน 1 สัปดาห์ครบทั้ง 7 วัน

ข้อแตกต่างของฟังก์ชัน Format ( ) และฟังก์ชัน Format$ ( ) คือ ฟังก์ชัน Format ( ) ค่าที่คืนกลับมาจะเป็นข้อมูลชนิด Variant ส่วนฟังก์ชัน      Format$ ( ) ค่าที่คืนกลับมา เป็นข้อมูลชนิด String

  • คำสั่ง With...End With

หน้าที่ ใช้สำหรับแก้ไขคุณสมบัติหรือเมธอด ของอ๊อบเจ็กต์หรือคอนโทรลหลายๆ อย่างพร้อมกัน
รูปแบบการใช้งาน

With object
    [statements ]

End With

ตัวแปร object หมายถึง อ๊อบเจ็กต์หรือคอนโทรลใดๆ ที่คุณต้องการแก้ไข
ตัวแปร statements หมายถึง คุณสมบัติหรือเมธอดของอ๊อบเจ็กต์ ที่คุณต้องการแก้ไข เช่น

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

สมมติว่าคุณต้องการแก้ไขคุณสมบัติของคอนโทรล TextBox ถ้าโดยปกติแล้ว คุณต้องเขียนโค้ดดังนี้

Private Sub Form_Load()
Text1.Text = "Your Text"
Text1.Alignment = 2
Text1.BorderStyle = 1
End Sub

แต่ถ้าคุณใช้คำสั่ง With...End With เข้าช่วย ก็จะทำให้โค้ดของคุณเรียบร้อยยิ่งขึ้น ดังนี้

Private Sub Form_Load()
With Text1
    .Text = "Your Text"
    .Alignment = 2
    .BorderStyle = 1
End With
End Sub

การสร้างโพรซีเดอร์ทั่วไป (General Procedure)

ถึงแม้ว่า VB จะมีชุดคำสั่ง และฟังก์ชันมาตรฐานอยู่มากมาย แต่ก็ยังไม่สามารถครอบคลุมการทำงานได้ทั้งหมด คุณสามารถสร้างชุดคำสั่ง หรือฟังก์ชัน ขึ้นมาใช้งานเองได้ ซึ่งแยกออกได้ 2 แบบใหญ่ๆ คือ

  • ซับรูทีน (Sub routine) มีลักษณะเหมือนกับคำสั่งมาตรฐานใน VB กล่าวคือ เป็นชุดคำสั่งที่ไม่มีการส่งค่ากลับ
  • ฟังก์ชัน (Function) มีลักษณะเช่นเดียวกับฟังก์ชันมาตรฐานใน VB ซึ่งจะส่งค่ากลับออกมา 1 ค่าเสมอ

การสร้างซับรูทีน (Sub routine)

จะใช้คำสั่ง Sub เพื่อต้องการสร้างโพรซีเดอร์ทั่วๆ ไป แบบซับรูทีน ซึ่งมีโครงสร้าง ดังนี้

[Private | Public] [Static] Sub name [(arglist  )]
     [statements ]
[Exit Sub]
     [statements ]
End Sub

คำสงวน Private หมายถึง กำหนดให้ซับรูทีนที่สร้างขึ้นมา มีขอบเขตในการเรียกใช้งานเฉพาะฟอร์ม หรือโมดูลที่ประกาศเท่านั้น
คำสงวน Public หมายถึง กำหนดให้ซับรูทีนที่สร้างขึ้นมา สามารถถูกเรียกใช้งานได้ทุกส่วน
คำสงวน Static หมายถึง กำหนดให้ซับรูทีนเก็บรักษาค่าที่ได้จากการประมวลผลไว้ เมื่อมีการเรียกใช้งานซับรูทีนครั้งต่อๆ ไป ค่าดังกล่าวจะมีค่าเท่าเดิม
คำสั่ง Sub หมายถึง ต้องการสร้างโพรซีเดอร์ทั่วๆ ไป แบบซับรูทีน
ตัวแปร name หมายถึง ชื่อของซับรูทีน
ตัวแปร arglist หมายถึง อาร์กิวเมนต์ที่ต้องใช้ในซับรูทีน ซึ่งจะมีหรือไม่มีก็ได้
ตัวแปร statements หมายถึง ชุดคำสั่งต่างๆ ในซับรูทีน
คำสั่ง Exit Sub หมายถึง บังคับให้ออกจากซับรูทีนนี้ทันที
คำสั่ง End Sub หมายถึง จบโพรซีเดอร์

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

Option Explicit
Sub FormCenter(frm As Form)
'ซับรูทีนนี้ต้องการอาร์กิวเมนต์ 1 ตัว คือ ฟอร์มที่คุณต้องการจัดตำแหน่งกึ่งกลาง ผ่านทางอาร์กิวเมนต์ frm
   Dim x As Integer 'สำหรับเก็บตำแหน่งฟอร์มตามแกน x
   Dim y As Integer 'สำหรับเก็บตำแหน่งฟอร์มตามแกน y
      x = (Screen.Width - frm.Width) \ 2 'ความกว้างของจอภาพ-ความกว้างของฟอร์มก่อน แล้วหารด้วย 2 แบบผลลัพธ์จำนวนเต็ม เก็บไว้ในตัวแปร x
      y = (Screen.Height - frm.Height) \ 2 'ความสูงของจอภาพ-ความสูงของฟอร์มก่อน แล้วหารด้วย 2 แบบผลลัพธ์จำนวนเต็ม เก็บไว้ในตัวแปร y
   frm.Move x, y 'ย้ายฟอร์มไปยังตำแหน่ง x และ y
End Sub

Private Sub Form_Load()
'เรียกใช้งานซับรูทีน FormCenter โดยใช้คำสั่ง Call ส่วนคำสงวน Me หมายถึง แทนฟอร์มปัจจุบัน
   Call FormCenter(Me)
End Sub

จากตัวอย่างซับรูทีน ถ้าคุณมีการเปลี่ยนแปลงชื่อ (คุณสมบัติ Name) ของฟอร์ม ให้คุณนำชื่อดังกล่าวใส่แทนคำสงวน Me เพื่อสั่งให้ฟอร์มนั้นๆ อยู่กึ่งกลางจอภาพ

การสร้างฟังก์ชัน (Function)

จะใช้คำสั่ง Function เพื่อสร้างฟังก์ชันขึ้นมาใช้งานเอง โดยมีโครงสร้าง ดังนี้

[Public | Private] [Static] Function name [(arglist  )] As type
    [statements ]
[Exit Function]
   [statements ]
End Function

คำสงวน Private หมายถึง กำหนดให้ฟังก์ชันที่สร้างขึ้นมา มีขอบเขตในการเรียกใช้งานเฉพาะฟอร์ม หรือโมดูลที่ประกาศเท่านั้น
คำสงวน Public หมายถึง กำหนดให้ฟังก์ชันที่สร้างขึ้นมา สามารถถูกเรียกใช้งานได้ทุกส่วน
คำสงวน Static หมายถึง กำหนดให้ฟังก์ชันเก็บรักษาค่าที่ได้จากการประมวลผลไว้ เมื่อมีการเรียกใช้งานฟังก์ชันครั้งต่อๆ ไป ค่าดังกล่าวจะมีค่าเท่าเดิม
คำสั่ง Sub หมายถึง ต้องการสร้างโพรซีเดอร์ทั่วๆ ไป แบบฟังก์ชัน
ตัวแปร name หมายถึง ชื่อของฟังก์ชัน
ตัวแปร arglist หมายถึง อาร์กิวเมนต์ที่ต้องใช้ในฟังก์ชัน ซึ่งจะมีหรือไม่มีก็ได้
ตัวแปร As type หมายถึง ฟังก์ชันนี้ จะส่งข้อมูลชนิดใดกลับมา เช่น Integer, Long, Single เป็นต้น
ตัวแปร statements หมายถึง ชุดคำสั่งต่างๆ ในฟังก์ชัน
คำสั่ง Exit Function หมายถึง บังคับให้ออกจากฟังก์ชันนี้ทันที
คำสั่ง End Function หมายถึง จบโพรซีเดอร์

ต่อไปนี้เป็นตัวอย่างฟังก์ชันที่ชื่อว่า Add มีหน้าที่สำหรับบวกตัวเลข ต้องการอาร์กิวเมนต์ 2 ตัว โดยคืนค่ากลับเป็นข้อมูลชนิด Integer

Option Explicit
Function Add(x As Integer, y As Integer) As Integer
Dim z As Integer 'สำหรับรับค่าที่ได้จากการบวก
    z = x + y 'นำอาร์กิวเมนต์ที่เข้ามา 2 ตัวบวกกัน แล้วเก็บไว้ที่ตัวแปร z
    Add = z 'ถ่ายทอดค่าที่ได้ ไปยังฟังก์ชัน Add
End Function 'จบฟังก์ชันแล้วส่งค่ากลับ (ชนิดข้อมูลแบบ Integer) ไปยังโพรซีเดอร์ ที่เรียกใช้งานฟังก์ชันนี้
Private Sub Form_Activate()
   Print Add(10, 20) 'แสดงผลลัพธ์ออกที่ฟอร์ม โดยเรียกใช้งานฟังก์ชัน Add และส่งอาร์กิวเมนต์เข้าไป 2 ตัว คือ 10 และ 20
End Sub

ขอให้คุณระวังในเรื่องของอาร์กิวเมนต์ที่ต้องส่งเข้าไปเป็นพิเศษ คุณต้องส่งอาร์กิวเมนต์ที่มีชนิดของข้อมูล เหมือนกับฟังก์ชันกำหนดไว้เท่านั้น ในกรณีนี้ผู้เขียนกำหนดไว้ว่า ฟังก์ชัน Add ต้องการอาร์กิวเมนต์ ที่มีชนิดของข้อมูลเป็น Integer คุณก็ต้องส่งเลขจำนวนเต็ม Integer เข้ามาเท่านั้น

ตัวอย่างโปรเจ็กต์ประจำบทที่ 4

ฟังก์ชันสำหรับการหาค่า Max และ Min

ตัวอย่างโปรเจ็กต์นี้ เป็นการสร้างฟังก์ชันสำหรับหาค่าสูงสุด และหาค่าต่ำสุด หรืออาจนำไปใช้ในลักษณะ swap ข้อมูลในอัลกอริทีมเรียงลำดับก็ได้ โดยการรับอาร์กิวเมนต์เข้ามา 2 ตัว ซึ่งผู้เขียนกำหนดให้เป็นข้อมูลชนิด variant ทั้ง 2 ตัว คุณผู้อ่านสามารถเปลี่ยนแปลงให้เป็นข้อมูลชนิดอื่นๆ ได้

Function Max(ByVal Val1 As Variant, ByVal Val2 As Variant) As Variant
  If Val1 > Val2 Then 'ถ้าค่าของตัวแรกมากกว่าตัวที่ 2 แล้ว
     Max = Val1 'ให้เอาค่าของตัวแรกเป็นค่าสูงสุด แล้วเก็บไว้ที่ตัวแปร Max
  Else
     Max = Val2 'ถ้าไม่ใช่ให้เอาค่าของตัวที่ 2 เป็นค่าสูงสุด แล้วเก็บไว้ที่ตัวแปร Max
  End If
End Function

Function Min(ByVal Val1 As Variant, ByVal Val2 As Variant) As Variant
  If Val1 < Val2 Then 'ถ้าค่าของตัวแรกน้อยกว่าตัวที่ 2 แล้ว
     Min = Val1 'ให้เอาค่าของตัวแรกเป็นค่าต่ำสุด แล้วเก็บไว้ที่ตัวแปร Min
  Else
     Min = Val2 'ถ้าไม่ใช่ให้เอาค่าของตัวที่ 2 เป็นค่าต่ำสุด แล้วเก็บไว้ที่ตัวแปร Min
End If
End Function

ฟังก์ชันสำหรับหาค่าเลขยกกำลัง

เป็นฟังก์ชันที่ใช้คำนวณหาค่าเลขยกกำลัง ต้องการอาร์กิวเมนต์ 2 ตัว คือ เลขฐาน (base) และเลขยกกำลัง (exp)

Function powern(ByVal base As Double, ByVal exp As Integer) As Double
Dim rtnVal As Double 'ตัวแปรรับค่าส่งกลับ

'ตรวจสอบเลขฐานเท่ากับศูนย์หรือไม่
   If base = 0 Then
     MsgBox "Base can not be zero" 'ถ้าใช่แสดงข้อความ Base can not be zero แล้วจบการทำงาน
     End
   End If

'ตรวจสอบเลขยกกำลังว่าเป็นค่าติดลบหรือไม่
   If exp < 0 Then
'ถ้าใช่แสดงข้อความ Exponent must greater than or equal to zero แล้วจบการทำงาน
     MsgBox "Exponent must greater than or equal to zero"
     End
   End If

'ตรวจสอบว่า เลขยกกำลังมีค่าเป็น 0 หรือไม่
   If exp = 0 Then 'ถ้าใช่ ส่งค่า 1 กลับ
     rtnVal = 1
Else 'ถ้าไม่ใช่
     rtnVal = 1 'กำหนดค่าส่งกลับ เริ่มต้นที่ 1
   Do While exp > 0 'วนลูปจนกว่าเลขยกกำลังมีค่าไม่ติดลบ
     rtnVal = base * rtnVal 'เอาเลขฐานที่ส่งเข้ามาคูณกับค่าเริ่มต้นแล้วเก็บไว้ที่ตัวแปร rtnVal
     exp = exp - 1 'ลดค่าเลขยกกำลัง
   Loop
End If
powern = rtnVal 'ส่งค่าที่คำนวณได้ให้กับฟังก์ชัน
End Function

ฟังก์ชันสำหรับคำนวณค่า factorial

เป็นฟังก์ชันที่ใช้คำนวณค่า factorial โดยมีขอบเขตในการใช้งานคือ สามารถหาค่าได้สูงสุด 12! เท่านั้น

Function factorial(ByVal n As Integer) As Double
Dim rtnVal As Long 'ตัวแปรรับค่าส่งกลับ
'ตรวจสอบค่า n ว่าติดลบหรือไม่
   If n < 0 Then 'ถ้าใช่ แสดงข้อความ n must greater than or equal to zero แล้วออกจากฟังก์ชัน
     MsgBox "n must greater than or equal to zero"
     End
   End If

'ตรวจสอบค่า n=0 หรือไม่
   If n = 0 Then 'ถ้าใช่คืนค่า 1
     rtnVal = 1
   Else 'ถ้าไม่ใช่
     rtnVal = 1 'กำหนดค่าส่งกลับเท่ากับ 1
     Do While n > 0 'ให้วนลูปจนกว่า n มากกว่า 0
       rtnVal = rtnVal * n 'เอาค่า n คูณกับ rtnVal แล้วเก็บไว้ที่ตัวแปร rtnVal
       n = n - 1 'ลดค่า n
     Loop
   End If
factorial = rtnVal 'ส่งค่ากลับให้กับฟังก์ชัน
End Function