Visual Basic

Home

Visual Basic Tutorial
Knowledge Developer Database Internet Resource
ตัวแปรและ Procedure
1. ตัวแปรและ Procedure
2. การทำงานกับ Window
 
Visual Basic Tutorial
1. Visual Basic 6
2. ฟอร์ม
3. Intrinsic Control
4. ตัวแปรและ Procedure
5. Class
6. Common Control1
7. Common Control2
8. ActiveX Control
9. Interface
10. ฐานข้อมูล
11. Database Control
 
Developer
Visual Basic
Microsoft Access
Microsoft Excel
 

ตัวแปร และ procedure

ตัวแปร และ procedure เป็นส่วนประกอบพื้นฐานของการคำนวณและประมวลผลในโปรแกรมประยุกต์ Visual Basic

ขอบเขตของตัวแปร

ตัวแปรของ Visual Basic สามารถมองเห็นได้เมื่อเข้าไปใน procedure หรือ โมดูล และตัวแปรแต่ละตัวมีขอบเขต และอายุไม่เท่ากัน ขึ้นกับวิธีการประกาศลักษณะตัวแปร

ขอบเขต (Scope) หรือการมองเห็น ของตัวแปร เป็นการระบุเข้าถึงตัวแปร เช่น ตัวแปรที่กำหนดเป็น public สามารถอ่านและเขียนได้จากทุกส่วนของโปรแกรม แต่ถ้ากำหนดตัวแปรเป็น private จะเข้าถึงได้เฉพาะภายในโมดูล

อายุ (Lifetime) ของตัวแปร เป็นระยะเวลาที่ตัวแปรทำงานได้และใช้หน่วยความจำ เช่น ตัวแปรที่กำหนดเป็น public อาจจะมีอายุเท่ากับการเรียกใช้โปรแกรมประยุกต์ (แต่ไม่ใช่ทุกกรณี) ในขณะที่การกำหนดเป็นแบบ local dynamic จะได้รับการสร้างเป็นครั้งๆ เมื่อมีการประมวลผล procedure และถูกทำลายเมื่อออกจาก procedure

ตัวแปร Global

การประกาศตัวแปร global ใช้คีย์เวิร์ด Public ในโมดูล BAS ซึ่งตัวแปร global สามารถอ่านและนำไปใช้จากทุกส่วนในโปรแกรม

' ในส่วนการประกาศของ โมดูล BAS
Public UserCount as Long

วิธีการประกาศตัวแปร global สามารถใช้โครงสร้าง global UDT โดยการรวมตัวแปร global และประกาศตัวแปร global 1 ตัวที่มีประเภทเป็น global UDT

' ในส่วนการประกาศของ โมดูล BAS
Public Type GlobalUDT
UserCount As Long
UserName As String

End Type
Public gloPerson As GlobalUDT

ตัวแปรระดับโมดูล

ตัวแปรระดับโมดูล เป็นตัวแปรที่ใช้เฉพาะในโมดูลที่ประกาศ และการประกาศใช้คีย์เวิร์ด Private หรือ Dim ในส่วนการประกาศตัวแปรของโมดูล เช่น โมดูลมาตรฐานของ BAS โมดูลของฟอร์ม โมดูลของ class เป็นต้น

' ประกาศในส่วนการประกาศของ โมดูล
Private Long in Time As Date
Dim Login Password As String

คีย์เวิร์ด Public สามารถใช้ประกาศตัวแปรระดับโมดูลได้เช่นกัน ยกเว้น ในโมดูล BAS (การใช้ Public ในโมดูล BAS จะเป็นตัวแปร global)

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

' ประกาศในส่วนการประกาศของฟอร์ม
Public CustomerName As String

การเข้าถึงจากภายนอก เป็นการเข้าถึงในฐานะคุณสมบัติที่เจาะจง ส่วนการเข้าถึงจากภายในเป็นการเข้าถึงในฐานะตัวแปร

Form1.CustomerName = "John Smith"

อายุของตัวแปรระดับโมดูล จะเท่ากับการเรียกใช้โมดูล

ตัวแปร Dynamic Local

ตัวแปร dynamic local เป็นการประกาศภายใน procedure และมีขอบเขตเฉพาะภายใน procedure อายุของตัวแปรขึ้นกับ procedure โดยทุกครั้งที่ประมวลผล procedure จึงจะมีการสร้างตัวแปร เมื่อออกจาก procedure ตัวแปรจะถูกลบหน่วยความจำ

Sub Print Invoice ( )
Dim text As String

End Sub

ตัวแปร Static Local

ตัวแปร static Local มีลักษณะผสมเพราะมีขอบเขตแบบตัวแปร local แต่มีอายุเหมือนตัวแปรระดับโมดูล ค่าของตัวแปรจะอยู่ระหว่างการเรียก procedure จนถึงการ unload โมดูลจากหน่วยความจำ การประกาศตัวแปรใช้คีย์เวิร์ด Static

Sub Print Invoice ( )
Static InProgress As Boolean

End Sub

หรือใช้การประกาศตัวแปร ใน static procedure ตัวแปรภายใน procedure จะเป็นตัวแปรแบบ static local

Static Sub PrintInvoice ( )
Dim InProgress As Boolean

End Sub

ประเภทข้อมูล

1. ประเภทข้อมูลพื้นฐาน

ประเภทข้อมูล ประเภท ขนาด การเก็บข้อมูลหรือช่วงข้อมูล
Integer จำนวนเต็ม 2 ไบต์ –32,768 ถึง 32,767
Long จำนวนเต็ม 4 ไบต์ –2,147,483,648 ถึง 2,147,483,647
Boolean จำนวนเต็ม 2 ไบต์ เก็บค่า 0 และ –1 ซึ่งแทน False หรือ True
Byte จำนวนเต็ม 1 ไบต์ เก็บค่าในช่วง 0 ถึง 255
Single จำนวนทศนิยม 4 ไบต์ ค่าลบ –3.402823E38 ถึง –1.401298E-45
ค่าบวก 1.401298E-45 ถึง 3.402823E38
Double จำนวนทศนิยม 8 ไบต์ ค่าลบ –1.79769313486232E308 ถึง -4.94065645841247E-324
ค่าบวก 4.94065645841247E-324 ถึง 1.79769313486232E308
Currency จำนวนทศนิยม (4 ตำแหน่ง) 8 ไบต์ –922,337,203,477.5808 ถึง –922,337,203,477.5807
  จำนวนทศนิยม 8 ไบต์ ค่าที่ไม่มีทศนิยม +/- 79,228,162,514,264,337,593,543,950,335
ค่าที่มีทศนิยม +/- 7.92281625142643 37593543950335 และมีทศนิยม 28 ตำแหน่ง
String ข้อความ    
Date วันที่/เวลา 8 ไบต์ เก็บค่าระหว่าง 1 มกราคม ค.ศ. 100 ถึง 31 ธันวาคม ค.ศ. 9999 และเวลาใดๆ Date ใช้ 8 ไบต์เหมือนกับ Double แต่โครงสร้างมีความแตกต่างกัน โดยส่วนจำนวนเต็มเป็นสารสนเทศของวัน และทศนิยมเป็นส่วนของเวลา
Variant Variant 16 ไบต์ เก็บค่าของตัวแปร Variant จะรักษาประเภทข้อมูลเดิมของตัวแปรและค่าเริ่มต้นของตัวแปร
อ๊อบเจค อ๊อบเจค   เก็บการอ้างอิง

2. ประเภทข้อมูลอ๊อบเจค

อ๊อบเจคใน Visual basic เป็นตัวแปรประเภทที่เก็บการอ้างอิง

การประกาศตัวแปรอ๊อบเจคแบบทั่วไป

Dim frm As Form
Dim mdifrm As MDIForm
Dim Ctrl As Control
Dim Obj As Object

การประกาศตัวแปรอ๊อบเจคแบบเจาะจง

Dim frm As frmOrder
Dim txtSalary As TextBox
Dim wrk As Excel.Worksheet

การอ้างอิงค่าของตัวแปรอ๊อบเจคให้ใช้คีย์เวิร์ด Set

Set frm = frmCustomer
Set txtSalary = Text1

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

frm.Caption = "Hello World"
txtSalary.Text = Format(99000, "Currency")

การยกเลิกการอ้างอิงให้ค่าตัวแปรเป็น Nothing

Set frm = Nothing

3. ประเภทข้อมูล Aggregate

ประเภทข้อมูล Aggregate มีพื้นฐานมาจากประเภทข้อมูลพื้นฐาน (Native) โดยนำมาสร้างเป็นกลุ่มหรือบล็อกเพื่อก่อรูปเป็นแบบรวม หรือ Aggregate

3.1 Array

Array เป็นกลุ่มตัวแปรที่มีประเภทของข้อมูลชนิดเดียวกัน Visual Basic สนับสนุน array สร้างประเภทข้อมูลให้กับ element และสามารถสร้างได้ตั้งแต่ 1 มิติจนถึง 60 มิติ

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

Dim Names (100) As String

ดัชนีของ Array เริ่มจาก 0 ดังนั้นขนาดของ Array ตามตัวอย่างจะเท่ากับ 101

3.1.2 Dynamic array เป็นการกำหนด array โดยไม่ระบุขนาด แต่จะระบุขนาดเมื่อมีการใช้งาน ทำให้สะดวกกับผู้เขียนโปรแกรม ในขณะที่ static array ไม่สามารถปรับเปลี่ยนขนาดได้ การสร้าง dynamic array จะประกาศเพื่อทำให้มองเห็นได้ โดยใช้ประโยคคำสั่ง Dim กับวงเล็บว่าง เมื่อถึงขั้นตอนการใช้งาน จึงใช้ประโยคคำสั่ง ReDim สำหรับระบุขนาดที่แน่นอน

' BAS module
Dim Customers ( ) As String

Sub Main ( )
ReDim Customers (2000) As String
End Sub

ถ้าต้องการใช้ดัชนีค่าด้านล้างแตกต่างจาก 0 ให้ใช้ไวยากรณ์นี้

ReDim Customers (1 to 1000) As String
Dim Names (1 to 100) As String

การสร้าง dynamic array ซ้ำ โดยไม่ต้องการให้ลบค่าเดิม เนื่องจากการสร้างใหม่จะมีการปรับค่าใหม่ทำให้ข้อมูลเดิมหายไป ให้ใช้คำสั่ง ReDim Preserve

ReDim Preserve Customers (2000) As String

3.2 User-Defined Type

User-Defined Type (UDT) เป็นโครงสร้างข้อมูลแบบรวมที่สามารถควบคุมตัวแปรหลายตัวที่มีประเภทข้อมูลพื้นฐาน ก่อนการใช้ตัวแปร UDT ต้องประกาศโครงสร้างใช้ Type ในส่วนประกาศตัวแปรของโมดูล

Private Type EmployeeUDT
Name As String
Department As Long
Salary As Currency
End Type

Procedure

โมดูลของ Visual Basic ประกอบส่วนประกาศที่ใช้สำหรับการประกาศค่าตัวแปร ค่าคงที่และกลุ่มของ procedure สามารถแบ่งเป็น 2 ประเภท คือ

Sub Procedure เป็น procedure ที่ไม่ส่งค่า และไม่ใช่สามารถใช้เป็น expression ได้ แต่สามารถใช้เป็น Event procedure

Function เป็น procedure ที่ส่งคืนค่าเมื่อประมวลผลแล้วและใช้เป็น expression ได้

ขอบเขตของ Procedure

procedure สามารถจัดแบ่งได้ดังนี้

Private Procedure สามารถทำงานเฉพาะฟอร์มภายในโมดูล ที่กำหนดไว้

Public Procedure สามารถเรียกจากภายนอกโมดูล ถ้าโมดูลเป็น public จะสามารถเรียกจากภายนอกโปรแกรม ผ่าน COM

Friend Procedure มีลักษณะกึ่งกลางระหว่าง private และ public เช่น สามารถเรียกได้จากที่ต่าง ๆ ภายใน Project แต่ไม่สามารถเรียกจากภายนอกโปรแกรมได้

 

  

สงวนลิขสิทธิ (C) widebase