Chapter 3 โครงสร้างในการเขียนโปรแกรมด้วย Visual Basic

Chapter 3 Programming with Visual Basic

โครงสร้างในการเขียนโปรแกรมด้วย Visual Basic

การประกาศตัวแปร (Declarations)

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

Dim varname As datatypes

ความหมายของแต่ละส่วน มีดังนี้

  • Dim คือ คำสั่ง  (statements) ที่บอกให้ VB รู้ว่า คุณต้องการประกาศตัวแปร
  • varname คือ ชื่อของตัวแปร คุณสามารถตั้งชื่อตัวแปรได้อย่างอิสระ แต่ต้องไม่ผิดกฎการตั้งชื่อของ VB คุณควรจะตั้งชื่อตัวแปร ให้สื่อกับข้อมูลที่ตัวมันเก็บอยู่ จะทำให้คุณอ่านโค้ดได้ง่ายขึ้น
  • As คือ คำสงวน (keywords) ที่บอกให้ VB รู้ว่า คุณต้องการกำหนดให้ตัวแปรชื่อดังกล่าวแทนข้อมูลชนิดใด
  • datatypes คือ ชนิดของข้อมูลที่  VB สนับสนุนอยู่ ซึ่งมีอยู่หลายชนิด เช่น ตัวเลขจำนวนเต็ม (integer), ตัวอักษร (string) เป็นต้น

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

clip_image001

การประกาศตัวแปรแบบ Explicit ให้คุณใส่คำสั่ง Option Explicit ไว้ในส่วนบนสุด ก่อนการสร้างโพรซีเดอร์ จะเป็นการบังคับให้คุณ ต้องประกาศตัวแปรก่อน ที่จะนำไปใช้งานทุกครั้ง ถ้าคุณไม่ต้องการพิมพ์ข้อความดังกล่าวทุกครั้ง ให้คุณเลือกเมนู Tools/Optionเลือกหัวข้อ Require Variable Declaration VB จะใส่ข้อความดังกล่าว ให้คุณโดยอัตโนมัติทุกครั้ง ดังรูป

clip_image002

รูปที่ 3.1 แสดงข้อความ Option Explicit

กฎการตั้งชื่อตัวแปรและค่าคงที่

1.ให้ขึ้นต้นด้วยพยัญชนะเท่านั้น
2.ความยาวของชื่อที่ตั้งสูงสุดไม่เกิน 255 ตัวอักษร ในทางปฏิบัติ การตั้งชื่อที่ยาวจนเกินไป จะไม่เกิดประโยชน์ใดๆ กลับก่อให้เกิดผลเสียคือ   คุณต้องเสียเวลาพิมพ์โดยเปล่าประโยชน์
3.ชื่อที่คุณตั้ง จะต้องไม่ซ้ำกับคำสงวน (keywords), คำสั่ง(statements), ฟังก์ชัน (functions) หรืออื่นๆ ที่ VB กำหนดไว้
4.ห้ามตั้งชื่อซ้ำกันในโพรซีเดอร์เดียวกัน หรือในขอบเขตเดียวกัน
5.ห้ามใช้เครื่องหมายทางคณิตศาสตร์, ตัวดำเนินการ (Operators) หรือ เครื่องหมายพิเศษ เช่น @,# มาตั้งชื่อ
6.ห้ามมีช่องว่างในชื่อของตัวแปร ถ้าต้องการเว้นว่าง ให้ใช้เครื่องหมาย _ (underscore) เท่านั้น เช่น end_salary เป็นต้น

clip_image001[1]

ถ้าคุณตั้งชื่อผิดกฎ VB จะมีข้อความเตือนให้คุณทราบ

การตั้งชื่อคอนโทรลและอ๊อบเจ็กต์ตามคำแนะนำของไมโครซอฟท์

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

คอนโทรล

คำนำหน้า (Prefixs)

ตัวอย่าง

CheckBox

chk

chkStudents

ComboBox

cbo

cboSalary

CommandButton

cmd

cmdExit

CommonDialog

dlg

dlgSave

Data Control

dat

datStudents

DBComboBox

dbc

dbcList

DBGrid

dbg

dbgWork1

DBListBox

dbl

dblDisplay

DirListBox

dir

dirDestination

DriveListBox

drv

drvMain

FileListBox

fil

filInput

Frame

fra

fraDisplay

HScrollBar

hsb

hsbColor

Image

img

imgMain

Label

lbl

lblName

Line

lin

linTop

ListBox

lst

lstMouth

OptionButton

opt

optSex

Ole Container

ole

oleWord

PictureBox

pic

picPeople

Shape

shp

shpCircle

TextBox

txt

txtInput

Timer

tmr

tmrCount

VScrollBar

vsb

vsbHeight

ชนิดของข้อมูล

      VB มีชนิดของข้อมูลที่เป็นพื้นฐาน ให้คุณเลือกใช้ได้เหมาะสมตามที่คุณต้องการมากมาย   ไม่ว่าจะเป็นจำนวนเต็ม  (Integer), เศษส่วน (Single, Double)  ที่คุณยังสามารถ เลือกความละเอียดจำนวนตัวเลขได้อีกด้วย เพื่อให้เหมาะสมกับข้อมูลที่คุณต้องการเก็บ, ข้อความ (string), ตัวเลขทางการเงิน (Currency), ค่าทางตรรก (boolean) เป็นต้น ข้อมูลแต่ละชนิดที่กล่าวมา จะใช้พื้นที่ในการเก็บไม่เท่ากัน รวมถึงความเร็วในการประมวลผลก็แตกต่างกันด้วย เช่น ถ้าเป็นตัวเลข ให้คุณพยายามใช้ข้อมูลชนิด Integer ให้มากที่สุด เพราะว่าใช้ทรัพยากรน้อย และประมวลผลได้เร็ว แต่ก็ต้องขึ้นอยู่กับข้อมูลที่จะเก็บด้วย เนื่องจากข้อมูลชนิด Integer สามารถเก็บค่าที่อยู่ระหว่าง -32768 ถึง 32767 เท่านั้น ให้คุณเลือกใช้ชนิดของข้อมูลที่ใช้ทรัพยากรระบบให้น้อยที่สุด เท่าที่จะเป็นไปได้ก่อน โดยที่ยังสามารถรองรับความต้องการของคุณได้ 

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

ชนิดของข้อมูล

สัญลักษณ์พิเศษ

ใช้หน่วยความจำ

รายละเอียด

Boolean

ไม่มี

2 Bytes

เก็บค่าทางตรรก มีได้ 2 ค่า คือ true (จริง) , false (เท็จ) โดยที่ VB กำหนดไว้ว่า 0 มีค่าเท่ากับ false และตัวเลขจำนวนเต็มใดที่ไม่เท่ากับ 0 มีค่าเท่ากับ true

Byte

ไม่มี

1 Byte

เก็บค่าเลขจำนวนเต็มตั้งแต่ 0-255 ซึ่งเป็นรหัสแอสกี ASCII

Currency

@

8 Bytes

ใช้เก็บตัวเลขจำนวนจริง มีค่าระหว่าง -922,337,203,685,477.5808 ถึง 922,337,203,685,477.5807 ใช้สำหรับเก็บตัวเลขทางการเงินโดยเฉพาะ เพราะมีความละเอียดสูง มีทศนิยม 4 ตำแหน่ง

Variant

ไม่มี

ขึ้นอยู่กับชนิดข้อมูลที่เก็บ

สามารถเก็บข้อมูลได้ทุกชนิด

Integer

%

2 Bytes

เก็บค่าเลขจำนวนเต็มที่มีค่าระหว่าง   -32768 ถึง 32767

Long

&

4 Bytes

ใช้เก็บเลขจำนวนเต็มที่มีค่าระหว่าง -2,147,483,648 ถึง 2,147,483,647

Single

!

4 Bytes

ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 1.401298E-45 ถึง 3.402823E38 และค่าลบอยู่ระหว่าง   -3.402823E38 ถึง -1.401298E-45

Double

#

8 Bytes

ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 4.94065645841247E-324 ถึง 1.79769313486232E308 ค่าลบอยู่ระหว่าง -1.79769313486232E308 ถึง -4.94065645841247E-324

String

$

1 ตัว/1ไบต์  (ascii)

ใช้เก็บตัวอักษร   ข้อความ และตัวเลข

Date

ไม่มี

8 Bytes

ใช้สำหรับเก็บวันเดือนปี

Decimal

ไม่มี

12 Bytes

กรณีเลขจำนวนเต็ม มีค่าตั้งแต่ -79,228,162,514,264,337,593,543,950,335 ถึง +79,228,162,514,264,337,593,543,950,335

กรณีเลขทศนิยม มีค่าตั้งแต่  -7.9228162514264337593543950335 ถึง +-7.9228162514264337593543950335

ค่าที่น้อยที่สุดที่ไม่เท่ากับศูนย์ที่สามารถเก็บได้คือ 0.0000000000000000000000000001

Object

ไม่มี

?

ใช้สำหรับแทนอ๊อบเจ็กต์ หรือคอนโทรลที่ VB สนับสนุน

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

Dim x As Integer หมายถึง ให้ตัวแปร x เก็บข้อมูลที่เป็นตัวเลขจำนวนเต็มเท่านั้น (มีค่าอยู่ระหว่าง -32768 ถึง 32767)
Dim y As String  หมายถึง ให้ตัวแปร y เก็บข้อมูลที่เป็นข้อความ หรือตัวอักษรเท่านั้น

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

Boolean

เป็นข้อมูลชนิดบูลีน (Boolean) ใช้หน่วยความจำ 2 bytes สามารถมีค่า True (จริง) หรือ False (เท็จ) เท่านั้น ถ้าคุณกำหนดเป็นตัวเลข โดยที่ 0 หมายถึง False และตัวเลขจำนวนเต็มใดๆ ที่ไม่เท่ากับ 0 หมายถึง True เช่น

Dim a As Boolean

กำหนดให้ตัวแปร a เป็นตัวแปรชนิดบูลีน

Byte

เป็นข้อมูลชนิดเลขจำนวนเต็ม มีค่าระหว่าง 0-255 โดยใช้หน่วยความจำ 1 byte มักใช้เก็บรหัสโค้ดแอสกี้ ที่มีจำนวน 256 ตัวอักษร เช่น

Dim asc As Byte

กำหนดให้ตัวแปร asc เป็นตัวแปรชนิด Byte

Currency

เป็นข้อมูลชนิดที่มีค่าตั้งแต่ -922,337,203,685,477.5808 ถึง 922,337,203,685,477.5807 ใช้หน่วยความจำ 8 bytes ใช้สำหรับเก็บตัวเลขทางการเงินโดยเฉพาะ เพราะมีความละเอียดสูง มีทศนิยม 4 ตำแหน่ง เช่น

Dim Deb As currency

Date

เป็นข้อมูลสำหรับใช้เก็บวันที่ ซึ่งสามารถเก็บได้ตั้งแต่วันที่ 1 January 100 ถึงวันที่ 31 December 9999 และเก็บเวลาได้ตั้งแต่ 0:00:00 ถึง 23:59:59 ในการใช้ข้อมูลชนิดนี้ คุณต้องใช้เครื่องหมาย #...# ล้อมรอบค่าของตัวแปรด้วย ใช้หน่วยความจำ 8 bytes เช่น

Dim dte As Date
dte = #12/31/1999 11:59:59 PM#

Decimal

เป็นข้อมูลชนิดเลขจำนวนจริง ใช้หน่วยความจำ 12 bytes ซึ่งจะแยกออกเป็น 3 กรณีคือ

  • กรณีเลขจำนวนเต็ม มีค่าตั้งแต่ -79,228,162,514,264,337,593,543,950,335 ถึง +79,228,162,514,264,337,593,543,950,335
  • กรณีเลขทศนิยม มีค่าตั้งแต่  -7.9228162514264337593543950335 ถึง +-7.9228162514264337593543950335
  • ค่าที่น้อยที่สุดที่ไม่เท่ากับศูนย์ ที่สามารถเก็บได้คือ 0.0000000000000000000000000001

clip_image001[2]

ใน Visual Basic 6.0 คุณยังไม่สามารถประกาศ ให้เป็นข้อมูลชนิดนี้ได้โดยตรง คุณต้องทำ 2 ขั้นตอนดังนี้

1.ประกาศตัวแปรให้เป็นข้อมูลชนิด Variant ก่อน
2.ใช้ฟังก์ชัน CDec ( ) เพื่อแปลงชนิดของข้อมูลจาก Variant เป็น Decimal ดังนี้

Dim a As Variant
a = CDec("123456789123456789")

Double

ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 4.94065645841247E-324 ถึง 1.79769313486232E308 ค่าลบอยู่ระหว่าง -1.79769313486232E308 ถึง -4.94065645841247E-324 ใช้หน่วยความจำ 8 bytes เช่น

Dim aBs As Double

Integer

ใช้เก็บเลขจำนวนเต็มที่มีค่าตั้งแต่ -32768 ถึง 32767 ใช้หน่วยความจำ 2 byte เช่น

Dim count As Integer

Long

ใช้เก็บเลขจำนวนเต็มที่มีค่าระหว่าง -2,147,483,648 ถึง 2,147,483,647 ใช้หน่วยความจำ 4 byte เช่น

Dim num As Long

Single

ใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 1.401298E-45 ถึง 3.402823E38 และค่าลบอยู่ระหว่าง   -3.402823E38 ถึง -1.401298E-45 ใช้หน่วยความจำ 4 byte เช่น

Dim Intr As Single

String

เป็นข้อมูลชนิดข้อความ ซึ่งอาจเป็นได้ทั้งตัวอักษร หรือตัวเลขก็ได้ ขนาดหน่วยความจำที่ใช้จะขึ้นอยู่กับรูปแบบการจัดเก็บ คือ ถ้าตัวอักษรที่เก็บอยู่ในรูปแบบ ASCII จะใช้พื้นที่ 1 ตัวต่อ 1 byte แต่ถ้าเก็บในรูปแบบ Unicode อักษรแต่ละตัวจะใช้พื้นที่ 1 ตัวต่อ 2 bytes

ข้อมูลชนิด String สามารถแบ่งออกได้ 2 ประเภท คือ

  • Variable-length string หมายถึง เป็นตัวแปร String ที่คุณไม่ได้กำหนดขนาดของตัวอักษรไว้ คุณสามารถใส่ตัวอักษรได้ 65526 ตัวอักษร (ascii) และ 32763 ตัวอักษร (unicode)
  • Fixed-length string หมายถึง เป็นตัวแปร String ที่คุณจำกัดขนาดตัวอักษรไว้ คุณจะต้องใช้เลขจำนวนเต็มเท่านั้น ในการจำกัดขนาดตัวอักษร เช่น Dim a As String * 99 หมายถึง ตัวแปร a สามารถเก็บตัวอักษร รวมช่องว่างได้ไม่เกิน 99 ตัวอักษร สูงสุดที่ 98 ตัวอักษร ตัวสุดท้ายใช้เก็บตัวอักษรพิเศษ null กำกับไว้เพื่อบอกให้รู้ว่า จบข้อความแล้ว ซึ่งเป็นกฎเกณฑ์ที่คุณควรทราบไว้สำหรับในการใช้ตัวแปรชนิด String

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

การใช้งานตัวแปรแบบใช้สัญลักษณ์พิเศษกำกับ

คุณยังสามารถใช้งานตัวแปรได้ โดยการใช้สัญลักษณ์พิเศษต่อท้ายตัวแปรนั้นๆ ให้คุณดูตารางต่อไปนี้

ชนิดของข้อมูล

สัญลักษณ์พิเศษ

Integer

%

Long

&

Single

!

Double

#

Currency

@

String

$

การประกาศใช้งานตัวแปรแบบปกติ ถ้าคุณต้องการตัวแปรแบบ Integer คุณจะต้องประกาศ ดังนี้

Dim x As Integer   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขจำนวนเต็ม

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

Dim x% หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขจำนวนเต็ม Integer เช่นกัน
Dim x& หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขจำนวนเต็ม Long
Dim x!  หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขทศนิยมแบบ Single (ความละเอียดต่ำ)
Dim x# หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขทศนิยมแบบ Double (ความละเอียดสูง)
Dim x@ หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดเลขทางการเงิน Currency
Dim x$   หมายถึง ให้ตัวแปร x เก็บข้อมูลชนิดข้อความ String

clip_image001[3]

การประกาศตัวแปรแบบปกติ หรือประกาศแบบใช้สัญลักษณ์พิเศษต่อท้าย มีผลเหมือนกันทุกประการ คุณสามารถเลือกใช้ได้อย่างอิสระ

ขอบเขตของตัวแปร (Scope of Variable)

ตัวแปรที่คุณต้องการใช้งานในแอพพลิเคชันหนึ่งๆ จะมีมากมายหลายชนิด สิ่งหนึ่งที่คุณควรทราบก็คือ ตัวแปรแต่ละตัวมีขอบเขต การใช้งานเป็นอย่างไร หัวข้อนี้จะเป็นการอธิบาย ข้อจำกัดและขอบเขตของตัวแปร ใน VB สามารถแบ่งขอบเขตตัวแปรได้ 2 ประเภท คือ
1.ตัวแปรแบบ
Local
2.
ตัวแปรแบบ Public

ตัวแปรแบบ Local

หมายถึง ตัวแปรที่คุณประกาศขึ้นมา และสามารถเรียกใช้งานได้ ในเฉพาะโพรซีเดอร์ ที่ประกาศเท่านั้น มักใช้ประกาศตัวแปรที่คุณต้องการใช้ชั่วคราว หรือต้องการใช้แค่ในโพรซีเดอร์นั้นๆ เช่น

Private Sub Command1_Click()
Dim x As Integer
Dim y As Long
   x=x+y
End Sub

Private Sub Command2_Click()
   x=x*y
End Sub

จากตัวอย่างข้างต้น ตัวแปร x แทนชนิดข้อมูล Integer และ y แทนข้อมูล Long คุณสามารถเรียกใช้งานตัวแปรทั้ง 2 ได้เฉพาะในโพรซีเดอร์ Command1_Click( ) เท่านั้น (ในกรณีที่คุณกำหนดให้ VB ใส่ประโยค  Option Explicit)    ถ้าคุณเรียกใช้งานตัวแปรดังกล่าว ในโพรซีเดอร์ Command2_Click( ) VB จะแสดงข้อความ Variable not defined ซึ่งหมายถึง ตัวแปร x และ y ในโพรซีเดอร์ Command2_Click( ) ไม่ได้มีการประกาศตัวแปร จึงไม่สามารถนำตัวแปร x และ y มาใช้ได้ เพราะตัวแปร x และ y ที่คุณประกาศไว้ มีขอบเขตการใช้งานในระดับ Local หรือแค่ในโพรซีเดอร์ที่ประกาศไว้เท่านั้น แต่ถ้าในกรณีที่คุณไม่ได้กำหนดให้ VB ใส่ข้อความ Option Explicit ตัวแปร x และ y คุณสามารถเรียกใช้งานได้ ในโพรซีเดอร์ Command2_Click( ) แต่ตัวแปรทั้ง 2 จะเป็นข้อมูลชนิด Variant ซึ่งคุณไม่มีความจำเป็นต้องใช้ และตัวแปรชนิด Local นี้จะถูกยกเลิกหรือถูกทำลาย ซึ่งหมายถึง คืนหน่วยความจำให้กับระบบ เมื่อจบโพรซีเดอร์  (End Sub) ทันที

แต่ถ้าคุณต้องการใช้งานตัวแปรในโพรซีเดอร์ Command2_Click ( ) โดยใช้ชื่อ x และ y เหมือนกัน VB จะถือว่า เป็นตัวแปรคนละตัว และจะจองหน่วยความจำให้แต่ละตัว ไม่เกี่ยวข้องกันแต่อย่างใด เช่น

Private Sub Command1_Click()
Dim x As Integer
Dim y As Long
   x=x+y
End Sub

Private Sub Command2_Click()
Dim x As Long
Dim y As Single
   x=x*y
End Sub

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

ตัวแปรแบบ Public

หมายถึง ตัวแปรที่คุณประกาศใช้งานแล้ว คุณสามารถเรียกใช้งานได้ทั้งโปรเจ็กต์ โพรซีเดอร์ใด ฟอร์มใดก็ได้ อาจเรียกได้อีกอย่างหนึ่งว่า ตัวแปรร่วมแบบ Public หรือตัวแปรระดับโมดูล มักจะใช้ในกรณีที่ต้องเก็บค่าตัวแปร ที่ต้องใช้ทุกฟอร์ม หรือทุกโพรซีเดอร์ เช่น กรณีที่คุณเขียนโปรแกรม ซื้อ-ขายสินค้า ไม่ว่าจะเป็นการซื้อ หรือขาย ภาษีก็เท่ากับ 7 % เสมอ (สมมติ)   คุณไม่ต้องประกาศตัวแปรภาษี ทุกโพรซีเดอร์ หรือถ้าเป็นโปรแกรมเงินเดือน จะต้องมีการหักเงินประกันสังคม 3% ของพนักงานทุกคน คุณก็ไม่ต้องประกาศตัวแปรเงินประกันสังคมในทุกโพรซีเดอร์   คุณสามารถเลือกใช้ตัวแปรแบบ Public ได้ดังนี้

  • ให้คุณเลือกเมนู Project/Add Module VB จะเพิ่มไฟล์โมดูล .bas (Module) เข้ามาในโปรเจ็กต์ ให้คุณสังเกตที่หน้าต่าง Project Explorer จะมีรายการ Module1 เพิ่มเข้ามาในโปรเจ็กต์ ดังรูป

clip_image003

รูปที่ 3-2 หน้าต่างโมดูล (Module)

clip_image001[4]

ไฟล์โมดูล (Module) เป็นพื้นที่พิเศษที่ใช้สำหรับประกาศตัวแปร, ฟังก์ชันที่คุณเขียนขึ้นมา,  General Procedure,  หรือฟังก์ชัน Windows API  ฯลฯ เท่านั้น คุณไม่สามารถเขียนโค้ดในไฟล์โมดูล นี้ได้ คุณสามารถสังเกตได้โดยดูที่ช่อง Object list box และช่อง Event list box ไม่มีรายการอ๊อบเจ็กต์ หรือรายการเหตุการณ์แต่อย่างใด

ในบางครั้ง คุณอาจการประกาศค่าคงที่ เพื่อแทนตัวแปรแบบ Public ก็ได้

  • คุณต้องประกาศตัวแปรโดยใช้คำสั่ง  Public  แทนคำสั่ง  Dim ดังรูป ให้คุณระวังในจุดนี้ไว้ เพราะเนื่องจากว่า คุณอาจจะมีความเคยชินในการใช้คำสั่ง Dim เสมอ เพื่อประกาศตัวแปร เพราะถ้าคุณใช้คำสั่ง Dim ในการประกาศตัวแปรที่ไฟล์โมดูล มันจะกลายเป็นตัวแปรระดับ Local ที่สามารถเรียกใช้งานได้ เฉพาะในโมดูลที่ประกาศเท่านั้น ซึ่งก็จะไม่ใช่ตัวแปรแบบ Public ตามที่คุณต้องการ   และจะเกิดข้อความ Variable not defined เจ้าเก่า :-)

clip_image004

รูปที่ 3-3 แสดงการประกาศตัวแปรแบบ Public ในไฟล์โมดูล

เมื่อคุณประกาศตัวแปรแบบ Public แล้ว ในโพรซีเดอร์ Command1_Click ( ) และ Command2_Click ( ) คุณสามารถใช้งานตัวแปรทั้ง 2 ได้ โดยไม่ต้องประกาศตัวแปรอีกแต่อย่างใด

Private Sub Command1_Click()
   x=x+y
End Sub

Private Sub Command2_Click()
   x=x*y
End Sub

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

  • ให้คุณทดสอบโดยการประกาศตัวแปรในไฟล์ดูล ดังรูป

clip_image005

รูปที่ 3-4 ตัวอย่างทดสอบการประกาศตัวแปรแบบ Public และแบบ Local

จากนั้นในแต่ละโพรซีเดอร์ ให้คุณประกาศตัวแปร โดยใช้ชื่อเหมือนกัน แต่ต่างชนิดข้อมูลกัน ดังนี้

Private Sub Command1_Click()
   x = x * y
End Sub
Private Sub Command2_Click()
Dim x As String
   x = x + y
End Sub

ให้คุณทดลองรัน แล้วคุณลองคลิ๊กปุ่ม Command2 ปรากฎว่าจะเกิดข้อความ Run-time '13' Type mismatch ซึ่งหมายถึง ข้อมูลผิดประเภท เนื่องจากว่า ตัวแปร x (แบบ Public) ที่คุณประกาศไว้ในโมดูล เป็นข้อมูลตัวเลขจำนวนเต็ม Long แต่ตัวแปร x (แบบ Local) ที่คุณประกาศไว้ในโพรซีเดอร์ Command2_Click ( ) เป็นชนิดข้อความ String เป็นไปไม่ได้ที่ ตัวเลข+ตัวเลข จะเท่ากับข้อความ ถึงแม้ว่า จะเป็นข้อความที่เป็นตัวเลข แต่เป็นตัวเลขที่ไม่สามารถนำไปคำนวนได้เต็มรูปแบบ ให้คุณระวังในจุดนี้ให้ดี และขอให้คุณใช้ตัวแปรแบบ Public เท่าที่จำเป็นเท่านั้น

การใช้งานตัวแปรร่วมระดับโพรซีเดอร์

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

  • ให้คุณดับเบิ๊ลคลิ๊ก ที่ฟอร์มเพื่อเปิดหน้าต่าง editor แล้วเลือก General ใน Object list box ประกาศตัวแปรโดยการใช้คำสั่ง Dim ดังรูป

clip_image006

รูปที่ 3-5 ประกาศตัวแปรระดับโพรซีเดอร์ ใน Form1

เนื่องจากว่า ในแอพพลิเคชันหนึ่งๆ อาจจะมี 2 ฟอร์มขึ้นไป คุณอาจใช้ตัวแปรร่วมระดับโพรซีเดอร์ เพื่อจำกัดขอบเขตการเรียกใช้งานก็ได้ โดยตัวแปรร่วมระดับโพรซีเดอร์ จะมีขอบเขตเรียกใช้งาน แค่ในฟอร์มที่ประกาศไว้เท่านั้น ยกตัวอย่างเช่น ถ้าคุณเขียนโปรแกรมซื้อ-ขาย และโปรแกรมคิดเงินเดือน โดยกำหนดให้ โปรแกรมซื้อ-ขาย อยู่ใน Form1 และโปรแกรมคิดเงินเดือนให้อยู่ใน Form2 ซึ่งทั้ง 2 โปรแกรม ยังคงอยู่ในโปรเจ็ตก์เดียวกัน เป็นโปรเจ็กต์สารพัดประโยชน์จริงๆ  :-) คุณอาจใช้ตัวแปรร่วมระดับโพรซีเดอร์ เพื่อประกาศอัตราภาษี 7% ซึงใช้ร่วมกันทุกโพรซีเดอร์ เฉพาะใน Form1 เท่านั้น ส่วนในโปรแกรมเงินเดือน ไม่มีการใช้ภาษี 7% แต่อย่างใด ในทางกลับกัน คุณต้องการประกาศอัตราเงินประกันสังคม 3% ซึ่งใช้ร่วมกันทุกโพรซีเดอร์เฉพาะใน Form2 เท่านั้น โปรแกรมซื้อ-ขาย ไม่ต้องการ อัตราเงินประกันสังคมแต่อย่างใด เพื่อให้คุณเห็นภาพได้ชัดเจนมากยิ่งขึ้น ให้คุณทดลองทำดังนี้

ใน Form1 ประกอบไปด้วย 3 โพรซีเดอร์ ให้คุณใส่คอนโทรล CommandButton 3 ตัว และเขียนโค้ดดังนี้

Private Sub Command1_Click()
   a = a + b
End Sub
Private Sub Command2_Click()
   a = a * b
End Sub

Private Sub Command3_Click()
   Form2.Show 'Display Form2
End Sub

ในส่วนของ Form1 ให้คุณประกาศตัวแปรระดับโพรซีเดอร์ ดังนี้

clip_image007

รูปที่ 3-6 ประกาศตัวแปร a และ b ซึ่งเป็นตัวแปรร่วมระดับโพรซีเดอร์ ใน Form1

  • ให้คุณเพิ่ม Form2 เข้ามา โดยเลือกเมนู Project/Add Form เลือกไอคอน Form ดังรูป

clip_image008

รูปที่ 3-7 แสดงไอคอน Form จากคำสั่ง Add Form

จากนั้นใส่คอนโทรล CommandButton 2 ตัว ที่ Form2 และเขียนโค้ด ดังนี้

Private Sub Command1_Click()
    a = a + b
End Sub
Private Sub Command2_Click()
    a = a * b
End Sub

ให้คุณรันโปรเจ็กต์ ทดลองคลิ๊กที่ปุ่ม Command1 และ Command2 ของ Form1 ปรากฎว่าไม่มีอะไรเกิดขึ้น เพราะเป็นการคำนวณธรรมดา ให้คุณคลิ๊กที่ปุ่ม Command3 แล้ว Form2 จะปรากฎขึ้นมา ให้คุณคลิกที่ปุ่ม Command1 หรือ Command2 ของ Form2 ปรากฎว่า จะมีข้อความ Variable not defined เจ้าเก่าอีกนั่นเอง ปรากฎขึ้นมา

จากการทดลองดังกล่าว สรุปได้ว่า ตัวแปร a และ b  ซึ่งถูกประกาศให้เป็นตัวแปรร่วมระดับโพรซีเดอร์ มีขอบเขตการใช้งานแค่ใน Form1 เท่านั้น คุณสามารถเรียกใช้งานได้ ทั้งในโพรซีเดอร์ Command1_Click ( ) และ Command2_Click ( ) ที่อยู่ใน Form1 เท่านั้น แต่คุณไม่สามารถใช้งานตัวแปร a และ b ใน Form2 ได้เลย เพราะตัวแปร a และ b มีข้อจำกัดการใช้งาน แค่ในฟอร์มที่ประกาศเท่านั้น ให้คุณลองเปลี่ยนจากการประกาศใน Form1 เป็นประกาศในโมดูล ปรากฎว่า จะไม่มีปัญหาในการใช้งานตัวแปร a และ b แต่อย่างใด

การตั้งชื่อตัวแปรแบบบอกชนิดและขอบเขตของตัวแปร

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

Dim iSalary As Integer

ตัว i สื่อให้รู้ว่า ตัวแปร iSalary เป็นข้อมูลชนิด Integer

Dim strUser As String

ตัว str สื่อให้รู้ว่า ตัวแปร strUser เป็นข้อมูลชนิด String หรือถ้าคุณระบุขอบเขตของตัวแปรด้วยก็ได้ เช่น

Dim iLocSalary As Integer

ตัว i สื่อให้รู้ว่า เป็นตัวแปรชนิด Integer โดยมีขอบเขตระดับ Local

Dim strModName As String

ตัว str สื่อให้รู้ว่า เป็นตัวแปรชนิด String โดยมีขอบเขตการใช้งานระดับ Module

Dim lngLocEmployee As Long

ตัว lng สื่อให้รู้ว่าเป็นตัวแปรชนิด Long โดยมีขอบเขตการใช้งานระดับ Local เป็นต้น

clip_image001[5]

การตั้งชื่อแบบนี้ เหมาะกับแอพพลิเคชันที่ต้องมีการใช้งานตัวแปรจำนวนมากๆ และคุณต้องการให้ source code มีระเบียบ มีความเป็นมืออาชีพมากยิ่งขึ้น และสามารถย้อนกลับมาศึกษา source code นี้ได้อย่างไม่ยากเย็น คุณจะพบ source code ที่มีการตั้งชื่อตัวแปรแบบนี้ เมื่อมีการเรียกใช้งานกลุ่มฟังก์ชัน Windows API ร่วมด้วย หรือเป็นตัวอย่างแอพพลิเคชันที่มีขนาดใหญ่มากๆ

ตัวแปรอาร์เรย์ (Array)

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

Dim intCnt( ) As Integer

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

1.ตัวแปรอาร์เรย์แบบสแตติก (Static Arrays)
2.ตัวแปรอาร์เรย์แบบไดนามิก (Dynamic Arrays)

ตัวแปรอาร์เรย์แบบสแตติก (Static Arrays)

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

Dim x(5 ) As Integer หมายถึง ตัวแปร x เป็นตัวแปรอาร์เรย์ชนิดสแตติก ที่ใช้เก็บเลขจำนวนเต็ม Integer โดยที่มีสมาชิกทั้งสิ้น 5 ตัว การใช้งานตัวแปรแต่ละตัว โดยการใช้ชื่อ x(0) เป็นตัวที่ 1 หรือเรียกอีกอย่างหนึ่งว่า ขอบเขตล่าง ไปจนถึง x(4) เป็นตัวที่ 5 หรือเรียกอีกอย่างหนึ่งว่า ขอบเขตบน ซึ่งจะมีความสำคัญเป็นอย่างยิ่ง ในการใช้งานตัวแปรแบบอาร์เรย์ โดยปกติแล้วสมาชิกตัวแรกของตัวแปรแบบอาร์เรย์ จะมีลำดับที่ 0 เสมอ

Dim x(1 To 10 ) As Long หมายถึง ประกาศตัวแปรอาร์เรย์ ที่มีสมาชิก 10 ตัว แต่ละตัวแทนข้อมูลชนิด Long โดยที่มีขอบเขตล่างเท่ากับ 1 สมาชิกตัวแรกคือ x(1) ไปจนถึง x(10) โดยที่มีขอบเขตบนเท่ากับ 10 เป็นต้น

ค่าที่อยู่ในวงเล็บจะเรียกว่า ค่า Index ทำให้ตัวแปร x แต่ละตัวมีความแตกต่างกันนั่นเอง และในการใช้งาน ขอให้คุณใช้ตัวแปรอาร์เรย์ชนิดนี้ ให้น้อยที่สุดเท่าที่จะเป็นไปได้ เนื่องจากว่า เมื่อคุณประกาศตัวแปรอาร์เรย์แบบสแตติกแล้ว VB จะจองหน่วยความจำเท่ากับจำนวนสมาชิกทันที ถึงแม้ว่า คุณจะไม่มีการใช้งานตัวแปรก็ตาม หรือใช้งานตัวแปรไม่ครบทุกตัว คุณจะสูญเสียหน่วยความจำในส่วนนี้ไป เช่น กรณีข้างต้น สมมติว่า คุณใช้งานเพียง 3 ตัวแปร x(0), x(1) และ x(2) คุณต้องเสียหน่วยความจำไป 5 ส่วน ซึ่งไม่มีความจำเป็นแต่อย่างใด ขอให้คุณใช้อาร์เรย์ชนิดไดนามิกจะเหมาะสมกว่า

ตัวแปรอาร์เรย์แบบไดนามิก (Dynamic Arrays)

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

Dim intCnt( ) As Integer

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

ReDim [Preserve] varname(subscripts) As type

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

สมมติว่าคุณประกาศตัวแปรอาร์เรย์ Dim intCnt( ) As Integer ต่อมาคุณต้องการระบุขนาดจำนวนสมาชิกของตัวแปรดังกล่าว ให้คุณทำดังนี้

ReDim intCnt(10 ) As Integer

แต่ถ้าคุณต้องการรักษาค่า ที่ตัวแปรอาร์เรย์ intCnt ( ) เก็บไว้ด้วย คุณต้องเพิ่มเติมดังนี้

ReDim Preserve intCnt(10 ) As Integer

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

การสร้างตัวแปรอาร์เรย์มากกว่า 1 มิติ

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

x(0)

x(1)

x(2)

x(3)

x(n)

เมื่อคุณต้องการใช้งานตัวแปรอาร์เรย์ตัวใด คุณจะใช้ความแตกต่างของค่า subscript เพื่ออ้างถึงตัวแปรนั้นๆ กรณีนี้เป็นอาร์เรย์ชนิด 1 มิติ แต่ถ้าคุณต้องการเพิ่มแถวเข้าไปอีก จะเกิดอะไรขึ้น ดังรูป

x(0) (0)

x(0) (1)

x(0) (2)

x(0) (3)

x(0) (n)

x(1) (0)

x(1) (1)

x(1) (2)

x(1) (3)

x(1) (n)

ตัวอย่างข้างต้น คุณยังสามารถเพิ่มเติมมิติ (Dimentions) เข้าไปได้อีก โดยที่ค่า subscript ไม่มีทางซ้ำกันได้ ดังนั้น จึงเป็นแนวความคิดที่สร้างตัวแปรอาร์เรย์ที่มีมิติที่ 2 ขึ้นมา ซึ่งคุณต้องทำดังนี้

Dim x(1 To 5,1 To 4 ) As Long

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

x(1,1)

x(1,2)

x(1,3)

x(1,4)

x(2,1)

x(2,2)

x(2,3)

x(2,4)

x(3,1)

x(3,2)

x(3,3)

x(3,4)

x(4,1)

x(4,2)

x(4,3)

x(4,4)

x(5,1)

x(5,2)

x(5,3)

x(5,4)

คุณจะได้ตัวแปรทั้งสิ้น 20 ตัว ที่มีความแตกต่างกัน ซึ่งคุณอาจจะใช้แบบ Dim x(19 ) As Long ก็ได้ ไม่ผิดแต่อย่างใด นั่นคือ คุณจะได้ x(0) ถึง x(19)

การใช้งานคอนโทรลอาร์เรย์

ในการใช้งานตัวแปร เราสามารถใช้งานในลักษณะแบบปกติ และใช้งานแบบอาร์เรย์ ซึ่งหมายถึง การใช้งานตัวแปรชุด ที่มีการตั้งชื่อเหมือนกัน ต่างกันตรงที่ตัวแปรแต่ละตัวมีลำดับ (ค่า index) ต่างกัน ซึ่งแนวความคิดนี้เอง สามารถนำมาใช้กับคอนโทรลได้เช่นกัน นั่นคือ เราสามารถใช้งานคอนโทรลประเภทเดียวกัน โดยที่ตั้งชื่อเหมือนกัน ต่างกันตรงที่คอนโทรลแต่ละตัว จะมีค่า index ที่ทำให้คอนโทรลแต่ละตัว ไม่เหมือนกันนั่นเอง ซึ่งก็คือ การใช้งานคอนโทรลแบบอาร์เรย์ (Control Array)

ให้คุณทดลองโดยการวางคอนโทรล TextBox 1 ตัวบนฟอร์ม จากนั้นให้คุณคลิ๊กที่ตัวคอนโทรล TextBox เลือกคำสั่ง Copy แล้วเลือกคำสั่ง Paste ซึ่งคุณจะได้พบกับไดอะล๊อกบ๊อกซ์ ดังรูป

clip_image009

รูปที่ 3-8 แสดงไดอะล๊อกบ๊อกซ์ยืนยันการใช้งานคอนโทรลอาร์เรย์

ไดอะล๊อกบ๊อกซ์ดังกล่าว เป็นการยืนยันว่า คุณต้องการใช้งานคอนโทรล TextBox ในรูปแบบอาร์เรย์ ซึ่งเมื่อคุณตอบ Yes แล้ว คอนโทรล TextBox จะถูกใช้งานในลักษณะคอนโทรลอาร์เรย์

clip_image010

รูปที่ 3-9 แสดงการใช้งานคอนโทรล TextBox แบบคอนโทรลอาร์เรย์

จากรูปที่ 3-9 คุณจะพบว่า ชื่อของคอนโทรล TextBox ทั้ง 2 ตัวเหมือนกัน ให้คุณสังเกตได้ที่คุณสมบัติ Name ในหน้าต่างคุณสมบัติ รวมถึงชื่อของคอนโทรล TextBox ที่ปรากฎอยู่ในช่อง list box ในหน้าต่างคุณสมบัติด้วย ซึ่งจะเห็นว่า มีตัวเลขอยู่ในวงเล็บ Text1(0) สำหรับคอนโทรล TextBox ตัวแรกและ Text1(1) สำหรับคอนโทรล TextBox ตัวที่ 2 ดังรูป

clip_image011

รูปที่ 3-10 แสดงข้อแตกต่างของคอนโทรล TextBox แต่ละตัว เมื่อใช้งานในลักษณะของคอนโทรลอาร์เรย์

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

Text1(0).Text = "Your Text"

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

การสร้างชนิดของตัวแปรขึ้นใช้เอง (User-defined data type)

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

[Private | Public] Type varname
elementname [([subscripts])] As type
   [elementname [([subscripts])] As type]
   . . .
End Type

ความหมายของแต่ละส่วนมีดังนี้

คำสั่ง

รายละเอียด

Public

(Optional) หมายถึง กำหนดให้ชนิดของข้อมูลที่สร้างขึ้นมา สามารถใช้ได้ทั้งโปรเจ็กต์ ทุกโพรซีเดอร์ ทุกโมดูล

Private

(Optional) หมายถึง กำหนดให้ชนิดของข้อมูลที่สร้างขึ้นมา สามารถใช้ได้เฉพาะโมดูลที่ประกาศเท่านั้น ซึ่งเป็นค่า default คุณจะใส่หรือไม่ใส่ก็ได้

varname

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

elementname

ชื่อของตัวแปร ซึ่งเป็นส่วนหนึ่งของชนิดข้อมูลที่คุณสร้างขึ้นมา

subscripts

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

type

ชนิดของข้อมูลพื้นฐานแต่ละตัว ที่เป็นองค์ประกอบของข้อมูลที่คุณสร้างขึ้นมา เช่น Byte,  Boolean,  Integer,  Long,  Currency,   Single,  Double,   Date,  String (ไม่จำกัดความยาว), String * length (จำกัดความยาว),  Object,  Variant รวมถึงอาร์เรย์ด้วย

ตัวอย่างเช่น

Type Student
  FirstName As String
  LastName As String
  ID As Integer
End Type

เป็นการสร้างชนิดข้อมูลขึ้นมาใหม่ โดยให้ชื่อว่า Student เมื่อคุณต้องการใช้งานตัวแปรชนิดนี้ คุณต้องประกาศดังนี้

Dim Input As Student

ส่งผลให้ตัวแปร Input มีโครงสร้างเหมือนกับชนิดข้อมูล Student และเมื่อคุณต้องการอ้างถึงตัวแปรต่างๆ ที่อยู่ในโครงสร้างนี้ ให้คุณทำดังนี้

Input.FirstName = "Suphachai"
Input.LastName = "Somphanit"
Input.ID = 12345678

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

การประกาศค่าคงที่ (Constant)

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

[Public | Private] Const constname [As type] = expression

ความหมายของแต่ละส่วนมีดังนี้

คำสั่ง

รายละเอียด

Public

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

Private

Optional หมายถึง ให้ค่าคงที่สามารถใช้งานได้เฉพาะในฟอร์ม หรือโมดูลที่ประกาศเท่านั้น ซึ่งเป็นค่าปกติที่ VB ตั้งไว้อยู่แล้ว

Const

คำสั่งนี้ หมายถึงเป็นการเริ่มต้นสร้างค่าคงที่

constname

ชื่อค่าคงที่ คุณสามารถตั้งชื่อได้อย่างอิสระ โดยที่ไม่ผิดกฎการตั้งชื่อของ VB

type

Optional เป็นการกำหนดชนิดของค่าคงที่ ซึ่งอาจเป็น Byte, Boolean, Integer, Long, Currency, Single, Double,  Date, String, หรือ  Variant คุณสามารถกำหนดชนิดของค่าคงที่ โดยใช้คำสั่งนี้ร่วมด้วยก็ได้

expression

ค่าคงที่ ที่คุณต้องการกำหนดให้กับ constname

เช่น Const Vat = 0.07 
Public Const MyName = "Suphachai" 
Private Const cntyear As Integer = 12 
Const MyStr = "Hello World", mgpa As Double = 4.00

ตัวดำเนินการใน VB 6.0 (Operators)

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

ตัวดำเนินการด้านคณิตศาสตร์ (Arithmatic Operators)

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

ชื่อตัวดำเนินการ

ลักษณะตัวดำเนินการ

ตัวอย่าง

ผลลัพธ์

การบวก

+

15+20

35

การลบ

-

20-15

5

การคูณ

*

5*4

20

การหาร

/

9/3

3

การหารจำนวนเต็ม

\

10\3

3

การ Modulo

Mod

10 Mod 3

1

การยกกำลัง

^

2^2

4

การเปลี่ยนเครื่องหมาย

-

5

-5

รายละเอียดของตัวดำเนินการทางคณิตศาสตร์

การบวก, ลบ, คูณ, หาร เป็นไปตามกฏทางคณิตศาสตร์ ที่น่าสนใจคือ

  • การหารจำนวนเต็ม หมายถึง จะเอาแต่เฉพาะเลขที่เป็นจำนวนเต็มเท่านั้น ส่วนเศษ จะปัดทิ้ง เช่น 10\6=1.6666 แต่จะได้ผลลัพธ์เท่ากับ 1 แม้ว่า .6666 จะเกินครึ่งก็ตาม ไม่มีการปัดเศษแต่อย่างใด
  • การ Mod หมายถึง จะเอาแต่เศษที่เหลืออยู่จากการ Mod เช่น 10 Mod 3 =1 เนื่องจาก 10 หาร 3 ไม่ลงตัว เหลือเศษ 1 จึงได้ผลลัพธ์ 1, 20 Mod 6 =2 (เหลือเศษ 2 นั่นเอง)

ตัวดำเนินการทางด้านตรรกะ (Logical Operator)

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

A

B

And

Or

Xor

Eqv

Imp

Not A

True

True

True

True

False

True

True

False

True

False

False

True

True

False

False

False

False

True

False

True

True

False

True

True

False

False

False

False

False

True

True

True

รายละเอียดของตัวดำเนินการทางตรรกะ

  • ตัวดำเนินการ And จะมีกรณีเดียวที่เป็นจริงก็คือ ทั้ง 2 พจน์ต้องเป็นจริง
  • ตัวดำเนินการ Or จะมีกรณีเดียวที่เป็นเท็จก็คือ ทั้ง 2 พจน์ต้องเป็นเท็จ
  • ตัวดำเนินการ Xor ถ้า 2 พจน์มีค่าต่างกัน จะได้ผลลัพธ์เป็นจริง
  • ตัวดำเนินการ Eqv ถ้า 2 พจน์มีค่าเหมือนกัน จะได้ผลลัพธ์เป็นจริง
  • ตัวดำเนินการ Imp จะมีกรณีเดียวที่มีค่าเป็นเท็จคือ พจน์หน้าเป็นจริง พจน์หลังเป็นเท็จ
  • ตัวดำเนินการ Not เป็นการสลับค่าของพจน์ เช่น ถ้า A เป็นจริง จะได้ผลลัพธ์เป็นเท็จ

ตัวดำเนินการทางด้านการเปรียบเทียบ (Comparison Operators)

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

ตัวดำเนินการ

ชื่อตัวดำเนินการ

<

น้อยกว่า

>

มากกว่า

<=

น้อยกว่าหรือเท่ากับ

>=

มากกว่าหรือเท่ากับ

=

เท่ากับ

<>

ไม่เท่ากับ

ตัวดำเนินการทางด้านการเชื่อมข้อความ (Concentration Operators)

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

ตัวดำเนินการ

กรณี

ตัวอย่าง

ผลลัพธ์

+

String + String

"Visual"+"Basic 6.0"

"Visual Basic 6.0"

&

String & String

"Visual" & "Basic 6.0"

"Visual Basic 6.0"

+

String(numeric)+numeric

"20"+6

26

&

String(numeric)&numeric

"20"+6

206