การประกาศตัวแปร(Declarations) ก่อนที่คุณจะใช้งานตัวแปร หรือค่าคงที่ทุกครั้ง คุณควรที่จะประกาศตัวแปร (declare) ก่อน เพื่อบอกให้ VB รู้ว่า ตัวแปรชื่อนี้ คุณต้องการใช้งาน และตัวแปรดังกล่าว ใช้แทนข้อมูลชนิดใด เหตุที่ผู้เขียนใช้คำว่า ควรที่จะ เนื่องจากว่า VB จะอนุญาตให้คุณใช้งานตัวแปรได้ โดยที่คุณไม่จำเป็นต้องประกาศตัวแปร แต่ตัวแปรที่คุณได้มา มันจะกินทรัพยากรระบบ มากเกินความจำเป็น รวมถึงประมวลผลได้ช้าอีกด้วย เพราะจะเป็นตัวแปรที่สามารถแทนข้อมูลได้ทุกชนิด ซึ่ง VB เรียกว่า ตัวแปรชนิด Variant คุณอาจคิดว่า ตัวแปรชนิด Variant ก็ดีอยู่แล้ว ไม่ต้องยุ่งยาก ในการกำหนดรายละเอียดต่างๆ ให้วุ่นวาย แต่โปรแกรมเมอร์จะไม่นิยมใช้ และหลีกเลี่ยงที่จะใช้งานตัวแปรชนิด Variant อีกด้วย จะใช้ในกรณีที่จำเป็นเท่านั้น เนื่องจากว่ามีผลเสียมากกว่าผลดีที่คุณจะได้รับ เหตุผลที่สำคัญอีกประการหนึ่งก็คือ ตัวแปรต่างๆ ที่คุณนำมาใช้งานในโปรเจ็กต์ของคุณ ตัวคุณเองย่อมรู้ดีว่า จะใช้ตัวแปรใดบ้าง และจะให้ตัวแปรตัวใดแทนข้อมูลชนิดไหน ซึ่งคุณเองเป็นผู้กำหนดทั้งหมด ดังนั้นจึงไม่มีเหตุผลใด ที่คุณจะใช้ตัวแปรชนิด Variant จากเหตุผลข้างต้น คุณควรที่จะประกาศตัวแปรทุกครั้ง ก่อนที่จะนำไปใช้งาน ใน VB มีรูปแบบการประกาศดังนี้
Dim varname As datatypes ความหมายของแต่ละส่วน มีดังนี้
1.การประกาศตัวแปรแบบ Implicit Declaration หมายถึง VB ยอมให้คุณใช้งานตัวแปรได้ โดยไม่ต้องมีการประกาศตัวแปร ชนิดของข้อมูลที่ได้จะเป็นแบบ Variant ซึ่งไม่ควรนำมาใช้งานด้วยเหตุผลข้างต้น แต่ถ้าคุณต้องการใช้งานตัวแปรชนิดอื่นๆ โดยการประกาศแบบนี้ คุณสามารถใช้สัญลักษณ์พิเศษที่ VB กำหนดไว้ เพื่อเปลี่ยนชนิดของข้อมูล เป็นชนิดอื่นๆ ได้ ให้ดูหัวข้อ ชนิดของข้อมูลเพิ่มเติม 2.การประการตัวแปรแบบ Explicit Declaration หมายถึง คุณจะต้องมีการประกาศตัวแปรก่อนการใช้งานทุกครั้ง แล้วจึงสามารถนำตัวแปรนั้นๆ ไปใช้งานได้ การประกาศตัวแปรแบบ Explicit ให้คุณใส่คำสั่ง Option Explicit ไว้ในส่วนบนสุด ก่อนการสร้างโพรซีเดอร์ จะเป็นการบังคับให้คุณ ต้องประกาศตัวแปรก่อน ที่จะนำไปใช้งานทุกครั้ง ถ้าคุณไม่ต้องการพิมพ์ข้อความดังกล่าวทุกครั้ง ให้คุณเลือกเมนูTools/Option เลือกหัวข้อ Require Variable Declaration VB จะใส่ข้อความดังกล่าว ให้คุณโดยอัตโนมัติทุกครั้ง ดังรูป กฎการตั้งชื่อตัวแปรและค่าคงที่ 1.ให้ขึ้นต้นด้วยพยัญชนะเท่านั้น 2.ความยาวของชื่อที่ตั้งสูงสุดไม่เกิน 255 ตัวอักษร ในทางปฏิบัติ การตั้งชื่อที่ยาวจนเกินไป จะไม่เกิดประโยชน์ใดๆ กลับก่อให้เกิดผลเสียคือ คุณต้องเสียเวลาพิมพ์โดยเปล่าประโยชน์ 3.ชื่อที่คุณตั้ง จะต้องไม่ซ้ำกับคำสงวน (keywords), คำสั่ง(statements), ฟังก์ชัน (functions) หรืออื่นๆ ที่ VB กำหนดไว้ 4.ห้ามตั้งชื่อซ้ำกันในโพรซีเดอร์เดียวกัน หรือในขอบเขตเดียวกัน 5.ห้ามใช้เครื่องหมายทางคณิตศาสตร์, ตัวดำเนินการ (Operators) หรือ เครื่องหมายพิเศษ เช่น @,# มาตั้งชื่อ 6.ห้ามมีช่องว่างในชื่อของตัวแปร ถ้าต้องการเว้นว่าง ให้ใช้เครื่องหมาย _ (underscore) เท่านั้น เช่น end_salary เป็นต้น ถ้าคุณตั้งชื่อผิดกฎ VB จะมีข้อความเตือนให้คุณทราบการตั้งชื่อคอนโทรลและอ๊อบเจ็กต์ตามคำแนะนำของไมโครซอฟท์ เนื่องจาก VB มีคอนโทรลต่างๆ มากมาย โปรแกรมเมอร์มักจะใช้คำนำหน้า (prefixs) ในการตั้งชื่อคอนโทรล ต่อไปนี้ เป็นคำแนะนำของไมโครซอฟท์ ที่คุณควรใช้ตั้งชื่อคอนโทรล และอ๊อบเจ็กต์ ดังตารางต่อไปนี้ คอนโทรลคำนำหน้า (Prefixs)ตัวอย่างCheckBoxchkchkStudentsComboBoxcbocboSalaryCommandButtoncmdcmdExitCommonDialogdlgdlgSaveData ControldatdatStudentsDBComboBoxdbcdbcListDBGriddbgdbgWork1DBListBoxdbldblDisplayDirListBoxdirdirDestinationDriveListBoxdrvdrvMainFileListBoxfilfilInputFramefrafraDisplayHScrollBarhsbhsbColorImageimgimgMainLabellbllblNameLinelinlinTopListBoxlstlstMouthOptionButtonoptoptSexOle ContaineroleoleWordPictureBoxpicpicPeopleShapeshpshpCircleTextBoxtxttxtInputTimertmrtmrCountVScrollBarvsbvsbHeight ชนิดของข้อมูล VB มีชนิดของข้อมูลที่เป็นพื้นฐาน ให้คุณเลือกใช้ได้เหมาะสมตามที่คุณต้องการมากมาย ไม่ว่าจะเป็นจำนวนเต็ม (Integer), เศษส่วน (Single, Double) ที่คุณยังสามารถ เลือกความละเอียดจำนวนตัวเลขได้อีกด้วย เพื่อให้เหมาะสมกับข้อมูลที่คุณต้องการเก็บ, ข้อความ (string), ตัวเลขทางการเงิน (Currency), ค่าทางตรรก (boolean) เป็นต้น ข้อมูลแต่ละชนิดที่กล่าวมา จะใช้พื้นที่ในการเก็บไม่เท่ากัน รวมถึงความเร็วในการประมวลผลก็แตกต่างกันด้วย เช่น ถ้าเป็นตัวเลข ให้คุณพยายามใช้ข้อมูลชนิด Integer ให้มากที่สุด เพราะว่าใช้ทรัพยากรน้อย และประมวลผลได้เร็ว แต่ก็ต้องขึ้นอยู่กับข้อมูลที่จะเก็บด้วย เนื่องจากข้อมูลชนิด Integer สามารถเก็บค่าที่อยู่ระหว่าง -32768 ถึง 32767 เท่านั้น ให้คุณเลือกใช้ชนิดของข้อมูลที่ใช้ทรัพยากรระบบให้น้อยที่สุด เท่าที่จะเป็นไปได้ก่อน โดยที่ยังสามารถรองรับความต้องการของคุณได้ ตารางต่อไปนี้ เป็นชนิดของข้อมูลเบื้องต้นที่ VB สนันสนุน สิ่งที่คุณควรสนใจก็คือ ชนิดของข้อมูลที่สามารถเก็บได้, ขอบเขตของข้อมูล, ใช้หน่วยความจำระบบเท่าใด, และสัญลักษณ์พิเศษที่ใช้แทนชนิดของข้อมูล ใช้ในกรณีที่คุณต้องการใช้งานตัวแปรแบบ Implicit ชนิดของข้อมูลสัญลักษณ์พิเศษใช้หน่วยความจำรายละเอียดBooleanไม่มี2 Bytesเก็บค่าทางตรรก มีได้ 2 ค่า คือ true (จริง) , false (เท็จ) โดยที่ VB กำหนดไว้ว่า 0 มีค่าเท่ากับ false และตัวเลขจำนวนเต็มใดที่ไม่เท่ากับ 0 มีค่าเท่ากับ trueByteไม่มี1 Byteเก็บค่าเลขจำนวนเต็มตั้งแต่ 0-255 ซึ่งเป็นรหัสแอสกี ASCIICurrency@8 Bytesใช้เก็บตัวเลขจำนวนจริง มีค่าระหว่าง -922,337,203,685,477.5808 ถึง 922,337,203,685,477.5807 ใช้สำหรับเก็บตัวเลขทางการเงินโดยเฉพาะ เพราะมีความละเอียดสูง มีทศนิยม 4 ตำแหน่งVariantไม่มีขึ้นอยู่กับชนิดข้อมูลที่เก็บสามารถเก็บข้อมูลได้ทุกชนิดInteger%2 Bytesเก็บค่าเลขจำนวนเต็มที่มีค่าระหว่าง -32768 ถึง 32767Long&4 Bytesใช้เก็บเลขจำนวนเต็มที่มีค่าระหว่าง -2,147,483,648 ถึง 2,147,483,647Single!4 Bytesใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 1.401298E-45 ถึง 3.402823E38 และค่าลบอยู่ระหว่าง -3.402823E38 ถึง -1.401298E-45Double#8 Bytesใช้เก็บตัวเลขจำนวนจริง แยกเป็น 2 กรณี คือ ค่าบวกอยู่ระหว่าง 4.94065645841247E-324 ถึง 1.79769313486232E308 ค่าลบอยู่ระหว่าง -1.79769313486232E308 ถึง -4.94065645841247E-324String$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 กรณีคือ
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 ประเภท คือ
การใช้งานตัวแปรแบบใช้สัญลักษณ์พิเศษกำกับ คุณยังสามารถใช้งานตัวแปรได้ โดยการใช้สัญลักษณ์พิเศษต่อท้ายตัวแปรนั้นๆ ให้คุณดูตารางต่อไปนี้ ชนิดของข้อมูลสัญลักษณ์พิเศษ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 การประกาศตัวแปรแบบปกติ หรือประกาศแบบใช้สัญลักษณ์พิเศษต่อท้าย มีผลเหมือนกันทุกประการ คุณสามารถเลือกใช้ได้อย่างอิสระขอบเขตของตัวแปร (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 ได้ดังนี้
รูปที่ 3-2 หน้าต่างโมดูล (Module) ไฟล์โมดูล (Module) เป็นพื้นที่พิเศษที่ใช้สำหรับประกาศตัวแปร, ฟังก์ชันที่คุณเขียนขึ้นมา, General Procedure, หรือฟังก์ชัน Windows API ฯลฯ เท่านั้น คุณไม่สามารถเขียนโค้ดในไฟล์โมดูล นี้ได้ คุณสามารถสังเกตได้โดยดูที่ช่อง Object list box และช่อง Event list box ไม่มีรายการอ๊อบเจ็กต์ หรือรายการเหตุการณ์แต่อย่างใด ในบางครั้ง คุณอาจการประกาศค่าคงที่ เพื่อแทนตัวแปรแบบ Public ก็ได้
Private Sub Command1_Click() x=x+y End Sub Private Sub Command2_Click() x=x*y End Sub ถ้าในกรณีที่คุณมีการประกาศตัวแปรแบบ Local และตัวแปรแบบ Public โดยใช้ชื่อเดียวกัน VB จะถือว่าเป็นตัวแปรคนละตัว คนละแบบ และจะจองหน่วยความจำ ให้กับตัวแปรทั้ง 2 ไม่เกี่ยวข้องกันแต่อย่างใด และจะให้ความสำคัญกับตัวแปรแบบ Local ก่อนตัวแปรแบบ Public เสมอ เช่น
รูปที่ 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 ก็คือ คุณสามารถเรียกใช้งานตัวแปรแค่ในโพรซีเดอร์ที่ประกาศไว้เท่านั้น วิธีการประกาศตัวแปรร่วมระดับโพรซีเดอร์ ก็คือ |
ชนิดของตัวแปร
ตัวแปรที่ใช้งานภายในซีพียูมีหลากหลายชนิด และขนาดของตัวแปรแต่ละชนิด (ซึ่งก็คือ ขนาดของพื้นที่หน่วยความจำที่ต้องจองสำหรับเก็บข้อมูลชนิด นั้น) จะขึ้นอยู่ชนิดข้อมูลที่ต้องการใช้ในภาษา C51 แสดงได้ดังตาราง ตัวแปรที่มีเครื่องหมาย * ไม่ใช่ตัวแปรของภาษ C ตามมาตรฐาน ANSI C เป็นตัวแปรที่ใช้สำหรับภาษา C51 เท่านั้น การประกาศค่าคงที่ เมื่อต้องการใช้งานตัวแปรเพื่อเก็บข้อมูลที่จะใช้ในโปรแกรม เราจำเป็นต้องประกาศตัวแปรก่อน เพื่อนเป็นการจองพื้นที่หน่วยความจำสำหรับเก็บข้อมูล และเวลาเรียกใช้งานก็อ้างผ่านตัวแปรที่ได้ประกาศไว้นั่นเอง รูปแบบของคำสั่งที่ใช้ในการประกาศตัวแปร แสดงได้ดังนี้ type varible ; โดยที่ type คือ ชนิดของตัวแปรที่ต้องการสร้าง varible คือ ชื่อตัวแปร ตัวอย่าง int i ; // สร้างตัวแปรชื่อ i สำหรับเก็บข้อมูลจำนวนเต็ม char data ; // สร้่างตัวแปรชื่อ data สำหรับเก็บข้อมูลชนิดตัวอักษร float num ; // สร้างตัวแปรชื่อ num สำหรับเก็บข้อมูลชนิดทศนิยม int num = 1 ; // สร้างตัวแปรชื่อ num สำหรับเก็บข้อมูลจำนวนเต็ม และมีค่าเริ่มต้นเท่ากับ 1 char font = 'A' ; // สร้างตัวแปรชื่อ font สำหรับเก็บข้อมูลชนิดตัวอักษร และมีค่าเริ่มต้นเป็น ASCII คือ A int x = 0xFF ; // สร้างตัวแปรชื่อ x สำหรับเก็บข้อมูลจำนวนเต็ม และมีค่าเริ่มต้นเป็น 0xFF อยู่ในรูปฐานสิบหก unsigned int x,y,z ; // สร้างตัวแปร 3 ตัว ชื่อ x, y และ z สำหรับเก็บข้อมูลจำนวนเต็ม แบบไม่คิดเครื่องหมาย ค่าคงที่ ค่าคงที่ (Constant) คือ การประกาศตัวแปรชนิดหนึ่งพร้อมทั้งกำหนดค่าเริ่มต้นให้เลย โดยตัวแปรค่าคงที่จะไม่สามารถแก้ไขเปลี่ยนแปลงค่าในภายหลัง ได้ รูปแบบการประกาศตัวแปรค่าคงที่ต้องขึ้นต้นด้วยคำว่า "code" และกำหนดไว้ที่ส่วนหัวของโปรแกรม ปกติอยู่ถัดจากบรรทัด #define รูปแบบคำสั่งประกาศ ตัวแปรค่าคงที่แสดงได้ดังนี้ code type varible_constant = value_constant ; โดยที่ type คือ ชนิดของตัวแปร varible_constant คือ ชื่อของตัวแปรค่าคงที่ value_constant คือ ค่าคงที่ ตัวอย่าง code unsigned int time = 2 ; // ประกาศตัวแปรค่าคงที่ชื่อ time สำหรับเก็บข้อมูลจำนวนเต็มแบบไม่คิดเครื่องหมาย และกำหนดค่าคงที่เป็น 2 code int num[3] = {1,2,3} ; // ประกาศตัวแปรค่าคงที่ชื่อ num จำนวน 3 สมาชิก สำหรับเก็บข้อมูลจำนวนเต็ม และกำหนดค่าคงที่เป็น 1, 2 และ 3 // ตามลำดับ การประกาศค่าคงที่ เมื่อต้องการใช้งานตัวแปรเพื่อเก็บข้อมูลที่จะใช้ในโปรแกรม เราจำเป็นต้องประกาศตัวแปรก่อน เพื่อนเป็นการจองพื้นที่หน่วยความจำสำหรับเก็บข้อมูล และเวลาเรียกใช้งานก็อ้างผ่านตัวแปรที่ได้ประกาศไว้นั่นเอง รูปแบบของคำสั่งที่ใช้ในการประกาศตัวแปร แสดงได้ดังนี้ type varible ; โดยที่ type คือ ชนิดของตัวแปรที่ต้องการสร้าง varible คือ ชื่อตัวแปร ตัวอย่าง int i ; // สร้างตัวแปรชื่อ i สำหรับเก็บข้อมูลจำนวนเต็ม char data ; // สร้่างตัวแปรชื่อ data สำหรับเก็บข้อมูลชนิดตัวอักษร float num ; // สร้างตัวแปรชื่อ num สำหรับเก็บข้อมูลชนิดทศนิยม int num = 1 ; // สร้างตัวแปรชื่อ num สำหรับเก็บข้อมูลจำนวนเต็ม และมีค่าเริ่มต้นเท่ากับ 1 char font = 'A' ; // สร้างตัวแปรชื่อ font สำหรับเก็บข้อมูลชนิดตัวอักษร และมีค่าเริ่มต้นเป็น ASCII คือ A int x = 0xFF ; // สร้างตัวแปรชื่อ x สำหรับเก็บข้อมูลจำนวนเต็ม และมีค่าเริ่มต้นเป็น 0xFF อยู่ในรูปฐานสิบหก unsigned int x,y,z ; // สร้างตัวแปร 3 ตัว ชื่อ x, y และ z สำหรับเก็บข้อมูลจำนวนเต็ม แบบไม่คิดเครื่องหมาย ค่าคงที่ ค่าคงที่ (Constant) คือ การประกาศตัวแปรชนิดหนึ่งพร้อมทั้งกำหนดค่าเริ่มต้นให้เลย โดยตัวแปรค่าคงที่จะไม่สามารถแก้ไขเปลี่ยนแปลงค่าในภายหลัง ได้ รูปแบบการประกาศตัวแปรค่าคงที่ต้องขึ้นต้นด้วยคำว่า "code" และกำหนดไว้ที่ส่วนหัวของโปรแกรม ปกติอยู่ถัดจากบรรทัด #define รูปแบบคำสั่งประกาศ ตัวแปรค่าคงที่แสดงได้ดังนี้ code type varible_constant = value_constant ; โดยที่ type คือ ชนิดของตัวแปร varible_constant คือ ชื่อของตัวแปรค่าคงที่ value_constant คือ ค่าคงที่ ตัวอย่าง code unsigned int time = 2 ; // ประกาศตัวแปรค่าคงที่ชื่อ time สำหรับเก็บข้อมูลจำนวนเต็มแบบไม่คิดเครื่องหมาย และกำหนดค่าคงที่เป็น 2 code int num[3] = {1,2,3} ; // ประกาศตัวแปรค่าคงที่ชื่อ num จำนวน 3 สมาชิก สำหรับเก็บข้อมูลจำนวนเต็ม และกำหนดค่าคงที่เป็น 1, 2 และ 3 // ตามลำดับตัวดำเนินการ คือ การนำข้อมูลอย่างน้อยที่สุด 2 ตัวมากระทำอย่างใดอย่างหนึ่ง เช่น บวกกัน ลบกัน เชื่อมต่อกัน เปรียบเทียบกัน ทดสอบค่ากัน เป็นต้น ซึ่งสามารถแบ่งได้ 4 ประเภท ดังนี้ ตัวดำเนินการด้านคณิตศาสตร์ (Arithmatic Operators) เป็นตัวดำเนินการที่ใช้สำหรับ บวก ลบ คูณ หาร ตัวเลข มีรายละเอียดดังนี้ ชื่อตัวดำเนินการลักษณะตัวดำเนินการตัวอย่างผลลัพธ์การบวก+15+2035การลบ-20-155การคูณ*5*420การหาร/9/33การหารจำนวนเต็ม\10\33การ ModuloMod10 Mod 31การยกกำลัง^2^24การเปลี่ยนเครื่องหมาย-5-5รายละเอียดของตัวดำเนินการทางคณิตศาสตร์ การบวก, ลบ, คูณ, หาร เป็นไปตามกฏทางคณิตศาสตร์ ที่น่าสนใจคือ
ABAndOrXorEqvImpNot A True TrueTrueTrueFalseTrueTrueFalse TrueFalseFalseTrueTrueFalseFalseFalseFalse TrueFalseTrueTrueFalseTrueTrueFalseFalseFalseFalseFalseTrueTrueTrueรายละเอียดของตัวดำเนินการทางตรรกะ
ตัวดำเนินการชื่อตัวดำเนินการ<น้อยกว่า>มากกว่า<=น้อยกว่าหรือเท่ากับ>=มากกว่าหรือเท่ากับ=เท่ากับ<>ไม่เท่ากับตัวดำเนินการทางด้านการเชื่อมข้อความ (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"+626& String(numeric)&numeric"20"+6 206 ตัวแปรและค่าคงที่ เนื่องจากภาษา C51 มีโครงสร้างเหมือนกับภาษา C การประกาศตัวแปรและค่าคงที่จึงคล้ายกัน นั่นคือ ตัวแปรและค่าคงที่ซึ่งปรกาศไว้จะจองพื้นที่ไว้ ในหน่วยความจำ โดยการจองหน่วยความจำส่วนใดนั้น ขึ้นอยู่กับการกำหนดโมเดลหน่วยความจำให้เป็นแบบไหน ถ้าไม่ได้กำหนดโมเดลไว้ตัวแปรภาษา จะกำหนดให้ใช้หน่วยความจำ RAM ภายในซีพียู ตัวแปรในภาษา C51 ตัวแปร (Varible) คือ การจองพื้นที่หน่วยความจำสำหรับเก็บข้อมูล พร้อมทั้งกำหนดชื่อเรียกแทนหน่วยความจำในตำแหน่งนั้น การใช้งานก็เรียกใช้ผ่าน ชื่อตัวแปรที่เราได้ประกาศไว้ ตัวอย่างเช่น ถ้าเรากำหนดตัวแปรพร้อมกำหนดค่าเริ่มต้นดังนี้ int num = 1; ตัวแปรภาษา C51 จะจองพื้นที่ในหน่วยความจำไว้ 2 ไบต์ (เนื่องจากตัวแปรชนิด int ใช้พื้นที่ 2 ไบต์) โดยเริ่มตั้งแต่ตำแหน่งที่ 0050H - 0051H เวลาเรียก ใช้งานข้อมูลที่เก็บไว้ในพื้นที่ส่วนนี้ให้เรียกผ่านตัวแปร num ชนิดของตัวแปร ตัวแปรที่ใช้งานภายในซีพียูมีหลากหลายชนิด และขนาดของตัวแปรแต่ละชนิด (ซึ่งก็คือ ขนาดของพื้นที่หน่วยความจำที่ต้องจองสำหรับเก็บข้อมูลชนิด นั้น) จะขึ้นอยู่ชนิดข้อมูลที่ต้องการใช้ในภาษา C51 แสดงได้ดังตาราง ตัวแปรที่มีเครื่องหมาย * ไม่ใช่ตัวแปรของภาษ C ตามมาตรฐาน ANSI C เป็นตัวแปรที่ใช้สำหรับภาษา C51 เท่านั้น ข้อแตกต่างของตัวแปรอาร์เรย์แบบไดนามิก คือ คุณไม่ต้องระบุจำนวนสมาชิกในวงเล็บ จะเห็นได้ว่ามีความยีดหยุ่นมากกว่า ตัวแปรอาร์เรย์แบบสแตติก แต่ถ้าในขณะรัน คุณต้องการกำหนดจำนวนสมาชิกที่แน่นอน คุณต้องใช้คำสั่งดังนี้ ReDim [Preserve] varname(subscripts) As type
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)การตั้งชื่อตัวแปรแบบบอกชนิดและขอบเขตของตัวแปร ในการเขียนแอพพลิเคชันทั่วๆ ไป คุณจะต้องมีการเรียกใช้งานตัวแปรต่างๆ มากมาย ซึ่งคุณไม่สามารถที่จะจดจำได้อย่างถูกต้องทั้งหมด มีแนวทางการตั้งชื่อ ที่โปรแกรมเมอร์มืออาชีพนิยมใช้ เพื่อบอกชนิด หรือขอบเขตของตัวแปร เมื่อเวลาที่ย้อนกลับมาดู 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 เป็นต้น การตั้งชื่อแบบนี้ เหมาะกับแอพพลิเคชันที่ต้องมีการใช้งานตัวแปรจำนวนมากๆ และคุณต้องการให้ 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) เป็นตัวแปรอาร์เรย์ที่ใช้สำหรับกลุ่มของตัวแปร ที่คุณไม่ทราบจำนวนที่แน่นอน หรือคุณทราบแต่ต้องการใช้อาร์เรย์แบบไดนามิก เพื่อประหยัดทรัพยากรระบบ โดยที่ตัวแปรแบบอาร์เรย์ จะปรับขนาดจำนวนสมาชิกให้เท่ากับ จำนวนตัวแปรที่คุณต้องการใช้ในขณะนั้น จะเห็นได้ว่า มีการใช้ทรัพยากรระบบ เมื่อต้องการเท่านั้น ซึ่งเป็นข้อดีเป็นอย่างยิ่ง มีรูปแบบการประกาศดังนี้ ให้คุณรันโปรเจ็กต์ ทดลองคลิ๊กที่ปุ่ม 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 แต่อย่างใดจากนั้นใส่คอนโทรล 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 แต่อย่างใด |