Tải bản đầy đủ (.pdf) (84 trang)

Bài giảng thực hành ngôn ngữ lập trình visual basic

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.71 MB, 84 trang )



TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN



BÀI GIẢNG THỰC HÀNH
NGÔN NGỮ LẬP TRÌNH
VISUAL BASIC
(Tài liệu lưu hành nội bộ)



Biên soạn: Nguyễn Anh Tuấn


Đà Nẵng, 08/2014


TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ THÔNG TIN



BÀI GIẢNG THỰC HÀNH
NGÔN NGỮ LẬP TRÌNH
VISUAL BASIC
(Tài liệu lưu hành nội bộ)




Biên soạn: Nguyễn Anh Tuấn


Đà Nẵng, 08/2014


Ngôn ngữ lập trình Visual Basic



1

NỘI DUNG

LAB 1: CÀI ĐẶT VISUAL BASIC VÀ MÔI TRƯỜNG LÀM VIỆC CỦA VB 3
1.1 Cài đặt phần mềm Visual Basic 3
1.2 Chạy chương trình Visual Basic 6.0 6
1.3 Thiết lập môi trường làm việc 7
1.4 Lưu dự án (Project) ra đĩa 9
1.5 Chạy và đóng chương trình Visual Basic (VB) 9
1.6 Viết lệnh (Code) cho Form để hiển thị lời chào “Hello World” 9
LAB 2: BIẾN, MẢNG, HÀM, THỦ TỤC VÀ CÁC CẤU TRÚC ĐIỀU KHIỂN 13
2.1 Khai báo, gán và hiển thị giá trị của các loại biến cơ bản 13
2.2 Định nghĩa và sử dụng kiểu dữ liệu mới - Kiểu bản ghi 16
2.3 Định nghĩa Hàm (function) trong Visual Basic 17
2.4 Định nghĩa thủ tục trong Visual Basic 17
2.5 Truyền tham trị cho chương trình con 18
2.6 Truyền tham chiếu cho chương trình con 20
2.7 Cấu trúc rẽ nhánh If Then và If ElseIf Then 21

2.8 Cấu trúc đa rẽ nhánh Select Case 21
2.9 Cấu trúc lặp For 23
2.10 Cấu trúc lặp Do Loop While 24
LAB 3: SỬ DỤNG CÁC ĐIỀU KHIỂN CƠ BẢN TRONG VISUAL BASIC 27
3.1 Sử dụng TextBox, Label kết hợp với Command Button 27
3.2 Sử dụng điều khiển CheckBox 30
3.3 Sử dụng điều khiển ListBox 31
3.4 Thực hành đọc một số thuộc tính quan trọng của ListBox 32
3.5 Thực hành sử dụng đặc tính đa lựa chọn của Listbox 34
3.6 Thực hành tìm kiếm và loại bỏ một mục khỏi danh sách 35
3.7 Sử dụng điều khiển PictureBox 37
3.8 Sử dụng HscrollBar (Thanh cuộn ngang) 39
3.9 Sử dụng điều khiển Timer 40
LAB 4: SỬ DỤNG CÁC HỘP THOẠI 42
4.1 Sử dụng các hộp thoại 42


Ngôn ngữ lập trình Visual Basic



2
4.2 Hiển thị các loại hộp thoại SAVE - SAVE AS 43
4.3 Hiển thị hộp thoại FONT 45
4.4 Hiển thị hộp thoại COLOR 47
4.5 Hiển thị hộp thoại Printer 48
4.6 Hiển thị hộp thoại HELP 49
LAB 5: SỬ DỤNG MENU VÀ THANH CÔNG CỤ 50
5.1 Tạo menu có nhiều cấp 50
5.2 Tạo một Menu ngang có nhiều mục 51

5.3 Tạo một Menu ngang (Menu bar) đơn giản. 52
5.4 Viết lệnh cho các mục của menu 53
5.5 Tạo thanh công cụ Toolbar 54
5.6 Viết lệnh cho các nút trên thanh công cụ 59
5.7 Xây dựng chương trình soạn thảo văn bản đơn giản 60
LAB 6: TẠO, THAO TÁC VỚI CƠ SỞ DỮ LIỆU VÀ SỬ DỤNG CÁC ĐỐI TƯỢNG 64
6.1 Tạo một bảng CSDL trong Microsoft Access 2003 64
6.2 Kết nối đến CSDL sử dụng đối tượng ADO Data Control 69
6.3 Hiển thị bảng CSDL trong Data Grid 72
6.4 Thêm một bản ghi vào bảng CSDL 74
6.5 Sửa đổi nội dung của bản ghi 75
6.6 Tìm kiếm một bản ghi trong bảng 77
6.7 Sử dụng các phương thức của đối tượng RecordSet đề duyệt các bản ghi 81





Ngôn ngữ lập trình Visual Basic



3
LAB 1: CÀI ĐẶT VISUAL BASIC VÀ MÔI TRƯỜNG LÀM VIỆC
CỦA VB
1.1 Cài đặt phần mềm Visual Basic
Để cài đặt Visual Basic 6.0 chúng ta cần có bộ Visual Studio 6.0 (hoặc đĩa cài VB riêng)
lưu trong đĩa cứng hoặc đĩa CD-ROM. Với bộ Visual Studio cài đặt trên đĩa cứng, Các
bước thực hiện như sau :
B1: Tìm và chạy file Setup.exe


Chạy file Setup
B2: Chọn Next

Chọn Next


Ngôn ngữ lập trình Visual Basic



4
B3: Chọn “I Accept the Agreement”, sau đó chọn (click) Next

Các điều khoản về bản quyền
B4: Chọn Next

Nhập thông tin đăng ký
B5: Chọn “Custom” và chọn Next (Hoặc có thể chọn Products để cài đặt các sản phẩm
riêng biệt – Đây là cách đơn giản nhất)

Lựa chọn sản phẩm cần cài đặt


Ngôn ngữ lập trình Visual Basic



5


B6: Nếu muốn cài Visual Studio vào thư mục khác, click chọn Browse. Tiếp theo chọn
Next

Chọn đường dẫn để cài đặt
B7: Chọn Continue, Bước tiếp theo chọn OK

Tiến hành cài đặt
B8: Để khỏi tốn dung lượng đĩa cứng, nên bỏ các thành phần không cần thiết (bỏ dấu
kiểm tra đối với mục không muốn cài đặt) như hình 8 dưới đây:
Sau đó chọn Continue và chờ cho quá trình cài đặt kết thúc (Finish).


Ngôn ngữ lập trình Visual Basic



6

Chọn các thành phần cần cài đặt
1.2 Chạy chương trình Visual Basic 6.0
Click chọn Start→ Programs→ MS Visual Studio 6.0→ MS Visual Basic 6.0. Sau đó
chọn kiểu dự án là Standard EXE khi có hộp thoại hiện ra:

Chọn kiểu dự án cần phát triển


Ngôn ngữ lập trình Visual Basic




7
Sau khi nhấn nút Open, thì VB sẽ tạo sẵn cho chúng ta một Project, có giao diện như
hình dưới đây:

Cửa sổ giao diện chính của Visual Basic
1.3 Thiết lập môi trường làm việc
Từ cửa sổ chính, click chọn thực đơn (Menu) Tools, và chọn mục options

Đặt các tuỳ chọn cho môi trường làm việc
Huỷ lựa chọn tự động kiểm tra cú pháp và đặt độ rộng phím TAB = 8 (hoặc 6 v.v )



Ngôn ngữ lập trình Visual Basic



8

Đặt chế độ kiểm tra cú pháp và yêu cầu khai báo biến
Chọn Font chữ hiển thị cho văn bản chương trình nguồn. Hãy chọn font chữ là font
vntime hoặc VK Sans serif.

Chọn font và màu chữ cho văn bản chương trình nguồn
Đặt độ rộng của lưới trên Form :

Đặt độ rộng cho lưới


Ngôn ngữ lập trình Visual Basic




9
Ngoài ra còn nhiều thiết lập khác nữa, yêu cầu sinh viên tự thực hành !
1.4 Lưu dự án (Project) ra đĩa
Để lưu dự án ra đĩa, chọn menu File → Save Project. Hoặc nhấn biểu tượng đĩa mềm
trên thanh công cụ.
Lưu ý khi lưu Project: Một project có thể chứa các Form, report, module, image,
clAss v.v… Thì mỗi đối tượng này nên lưu vào một thư mục riêng tương ứng như thư
mục Forms, reports, modules, images, clAss v.v… Còn riêng file *.vbp (Visual Basic
Project) thì được lưu ở thư mục cha.
Dưới đây là một hình ảnh của việc lưu trữ các thành phần của một Project:

Việc tổ chức lưu trữ các thành phần của một dự án
1.5 Chạy và đóng chương trình Visual Basic (VB)
Để chạy chương trình, chúng ta có thể vào menu Run → Start (F5) hoặc Run→Start
with Full compile (Ctrl + F5)
• Run → Start: Chạy chương trình nhưng không dịch toàn bộ chương trình (tức
là chương trình chạy đến đâu thì máy dịch tới đó)
• Run → Start with full compile : Dịch toàn bộ chương trình trước khi chạy,
như vậy nếu có xuất hiện lỗi ở bất cứ đâu trong chương trình thì máy sẽ dừng
lại và thông báo lỗi.
1.6 Viết lệnh (Code) cho Form để hiển thị lời chào “Hello World”
Hiển thị lời chạy trong cửa sổ trung gian (Intermediate Window)
Bước 1: Tạo một Project : Vào menu Project → New Project, sau đó chọn loại Project
là Standard EXE như Hình 9.


Ngôn ngữ lập trình Visual Basic




10
Bước 2 : Mở cửa sổ soạn thảo lệnh: Vào menu View → Code
Bước 3: Viết lệnh như sau:

Viết lệnh trong cửa sổ Code
Bước 4: Chạy chương trình : Nhấn phím F5 hoặc tổ hợp phím Ctrl-F5 và quan sát kết
quả, ta sẽ thấy xuất hiện dòng chữ “Hello world” trong một cửa sổ có tên là Immediate.
Có thể hiện cửa sổ này bằng tổ hợp phím Ctrl-G.
Như vậy, lệnh Debug.print có chức năng hiển thị kết quả ra màn hình, nó tương tự như
lệnh Writeln trong PAscal, printf trong C hay ? trong Foxpro…
Hiển thị lời chào trong hộp thoại - MsgBox.
Các bước thực hiện giống như phần a) nhưng viết lệnh sau thay vì lệnh print:

Hiển thị lời chào bằng lệnh MsgBox
Nhấn F5 để chạy chương trình, ta có kết quả:

Kết quả chạy chương trình


Ngôn ngữ lập trình Visual Basic



11
Như vậy, lệnh MsgBox cũng có chức năng hiển thị kết quả ra màn hình giống như
Debug.Print nhưng trên một cửa sổ (hộp thoại) riêng.
Sử dụng câu lệnh Debug.Print

Lệnh Print dùng để in một biểu thức ra cửa sổ tạm thời (Immediate).
Chương trình sau đây sẽ hiển thị một xâu, một số, một biến số, một xâu với một biến,
một biểu thức bất kỳ bằng lệnh Debug.Print.

Các cách sử dụng lệnh Print
Nhấn F5 để chạy chương trình. Cửa sổ Immediate cho ta kết quả như sau:

Kết quả chạy chương trình
Lưu ý: Dấu “&” dùng để ghép các giá trị cần in.
Sử dụng Câu lệnh InputBox
Lệnh (hàm) InputBox có chức năng nhập dữ liệu từ người dùng, tương tự như Readln
trong PAscal, scanf trong C, Accept trong Foxpro Hàm InputBox có thể nhận một
trong 3 tham số quan trọng là: Dòng nhắc “Prompt”, Tiêu đề của hộp thoại “Title”
và giá trị mặc định “Default”. Hàm này trả về giá trị mà người dùng vừa nhập.


Ngôn ngữ lập trình Visual Basic



12
• Thực hành 1 : nhập họ tên của người dùng bằng hàm InputBox
Gõ đoạn lệnh sau vào trong thủ tục Form_Load :
SubForm_Load
Dim HoTen As String
HoTen = InputBox(“Nhập họ tên”)
Msgbox “Bạn vừa nhập xâu là : “ &HoTen
End Sub
• Thực hành 2: Nhập Họ tên và tuổi, sau đó thông báo ra màn hình bằng
MsgBox

SubForm_Load
Dim HoTen As String
Dim Tuoi As Integer
HoTen = InputBox(“Nhập họ tên”,”Tiêu đề: Nhập thông tin”)
Tuoi = InputBox(“Tuổi của bạn : “,”Nhập thông tin”, 20)
Msgbox “Bạn vừa nhập xâu là : “ &HoTen
MsgBox “Tuổi là : “ &Tuoi
End Sub
Một số nhận xét:
• Thủ tục SubForm_Load tương tự như hàm main trong C hay Begin … End.
trong Pascal sẽ được gọi đầu tiên khi chương trình chạy.
• Hàm MsgBox, Debug.Print và InputBox được sử dụng như những lệnh nhập
xuất dữ liệu đơn giản nhất trong Visual Basic.


Ngôn ngữ lập trình Visual Basic



13
LAB 2: BIẾN, MẢNG, HÀM, THỦ TỤC VÀ CÁC CẤU TRÚC
ĐIỀU KHIỂN

2.1 Khai báo, gán và hiển thị giá trị của các loại biến cơ bản
Khai báo biến
• Thực hành: Khai báo các biến tương ứng với các kiểu dữ liệu cơ bản trong VB,
sau đó gán giá trị và hiển thị giá trị của các biến ra màn hình bằng hàm
MsgBox.
• Hướng dẫn: Các kiểu dữ liệu cơ bản trong VB bao gồm Byte, Integer, Long,
Single, Double, String, Variant…

• Viết lệnh: Tạo một Project mới và gõ đoạn lệnh sau trong Form

Option Explicit
Dim ToanCucTrongFormAs Integer
Public ToanCucTrongUngDung As Integer
Private SubForm_Load()
Dim b As Byte
Dim Bool As Boolean
Dim i AsInteger
Dim L As Long
Dim F As Single
Dim D As Double
Dim S As String
Dim S1 As String * 30
Dim V As Variant
App.Title = "Khai báo biến trong Visual Basic"
MsgBox "Biến b, chiếm 1 byte, phạm vi biểu diễn 0-255"
MsgBox "Biến Bool, 2 byte, biểu diễn giá trị True và False"
MsgBox "Biến i, 2 byte, phạm vi: -32768 +32767"
MsgBox "Biến L, chiếm 4 byte, phạm vi: -2,147,483,648 đến 2,147,483,647 "
MsgBox "Biến F, chiếm 4 byte, biểu diễn số thực âm và dương"
MsgBox "Biến D, chiếm 8 byte, biểu diễn số thực âm và dương rất lớn"
MsgBox "Biến S, chiếm 10+độ dài của xâu. có thể lưu tới 2 tỉ ký tự"
MsgBox "Biến S1 là biến xâu có độ dài cố định (trường hợp này là 30)." & _
"có thể lưu tối đa khoảng 65400 ký tự"
MsgBox "Biến V là biến Variant, chiếm 16 byte. Nó có thể lưu bất kỳ loại giá trị nào"
End sub

Giải thích thêm:
• Biến ToanCucTrongForm (Toàn cục trong Form) được khai báo với từ khoá

Dim là biến có thể sử dụng ở bất kỳ đâu trong chính Form nó được khai báo.
• Biến ToanCucTrongUngDung (toàn cục trong toàn ứng dụng) được khai báo với
từ khoá Public có thể sử dụng ở bất kỳ Form nào trong toàn ứng dụng.
• Các biến khai báo trong SubForm_Load được gọi là các biến cục bộ trong thủ


Ngôn ngữ lập trình Visual Basic



14
tục, chúng chỉ được sử dụng bên trong chính thủ tục đó mà thôi.
• Đối với các biến thuộc kiểu Variant thì khi khai báo chỉ cần viết, ví dụ: Dim V
• Khai báo Dim V, S As String tương đương với : Dim V As Variant, S As
String (V sẽ có kiểu là Variant chứ không phải là string !!!).
• Biến kiểu Variant không được hỗ trợ trong phiên bản VB.NET !.
• Dấu & _ (Có 1 dấu cách giữa dấu & và dấu _ ) cho phép ngắt câu lệnh trên
nhiều dòng.
Gán và hiển thị giá trị của các biến
Thực hành: Gán giá trị cho các biến và hiển thị ra màn hình
Viết lệnh: Gõ đoạn code sau vào trong Form

Option Explicit
Dim ToanCucTrongFormAsInteger
Public ToanCucTrongUngDung AsInteger
PrivateSubForm_Load()
Dim b As Byte
Dim Bool As Boolean
Dim i AsInteger
Dim L As Long

Dim F As Single
Dim D As Double
Dim S As String
Dim S1 As String * 30
Dim V As Variant
App.Title = "Khai báo biến trong Visual Basic"
b = 100
Bool = True
i = 30000
L = 500000
F = 123.456
D = 1.5E+30
S = "Khoa Công nghệ Thông tin"
S1 = "Bộ môn Công nghệ phần mềm"
V = 10000
ToanCucTrongForm = 10
ToanCucTrongUngDung = 1000
MsgBox "b=" & b
MsgBox "Bool=" & Bool
MsgBox "i=" & i
MsgBox "L = " & L
MsgBox "F=" & F
MsgBox "D=" & D
MsgBox "S=" & S
MsgBox "S1=" & S1
MsgBox "V=" & V


Ngôn ngữ lập trình Visual Basic




15
MsgBox "ToanCucTrongForm=" & ToanCucTrongForm
MsgBox "ToanCucTrongUngDung=" & ToanCucTrongUngDung
End sub
Khai báo và sử dụng biến mảng
Khai báo hai biến mảng để lưu danh sách họ tên và điểm của 100 SV.
Viết lệnh: Hãy gõ đoạn code sau vào trong Form:
Option Explicit
Dim HT(100) As String '/// Mảng chứa được 101 phần tử từ 0 đến 100
Dim Diem(1 To 100) As Single '/// Mảng chứa được 100 phần tử từ 1 đến 100
Dim MaTran1(4, 4) As Single '/// Ma trận (mảng 2 chiều) có 5 hàng 5 cột
Dim MaTran2(1 To 4, 1 To 4) As Single '/// Mảng 2 chiều có 4 hàng, 4 cột
PrivateSubForm_Load()
HT(0) = "Bill"
HT(1) = "John"
HT(2) = "Gorge"
Diem(1) = 7
Diem(2) = 9
Diem(3) = 10
MaTran1(0, 0) = 5
MaTran1(0, 1) = 6
MaTran1(0, 4) = 8
MaTran2(1, 1) = 8
MaTran2(1, 2) = 9
MaTran2(4, 4) = 10
MsgBox "Giá trị của phần tử đầu tiên của mảng HT là : " & HT(0)
MsgBox "Diem(2) = " & Diem(2)
MsgBox "MaTran1(0,4)=" & MaTran1(0, 4)

MsgBox "MaTran2(4,4) = " & MaTran2(4, 4)
End sub

Lưu ý:
• Nếu khi khai báo mảng mà không chỉ rõ cận dưới (không có từ khoá To) thì mặc
định VB sẽ lấy cả phần tử có chỉ số là 0.
• Để truy cập đến một phần tử của mảng thì viết tên mảng kèm thêm chỉ số đặt
trong cặp ngoặc đơn.
• Lbound(M) (LBound = Lower Bound = Cận dưới) cho biết chỉ số dưới của
mảng M. Ví dụ LBound(Diem) cho ta 1. LBound(MaTran1) cho ta 0.
• Ubound(M) (UBound = Upper Bound = Cận trên) cho ta chỉ số trên của mảng
M. UBound(Diem) → 100.
• Khi khai báo một biến mảng mà không chỉ rõ số phần tử, ví dụ: Dim D()
AsInteger thì D được gọi là một mảng động (Dynamic array).
• Đối với mảng động, ta có thể thay đổi lại số phần tử của mảng bằng câu lệnh
Redim. Ví dụ, xin 50 phần tử lưu trữ cho mảng D bằng cách viết : Redim D(50).


Ngôn ngữ lập trình Visual Basic



16
2.2 Định nghĩa và sử dụng kiểu dữ liệu mới - Kiểu bản ghi
Thực hành: Định nghĩa kiểu dữ liệu mới để biến thuộc kiểu dữ liệu này có thể lưu trữ
được các thông tin về một cuốn sách (Tên sách, Tên tác giả, năm xuất bản, giá).
Hướng dẫn: Kiểu dữ liệu mới nên định nghĩa trong Module, còn nếu định nghĩa trong
Form thì chỉ có thể ở dạng Private (tức chỉ sử dụng cục bộ trong Form) mà không thể
ở dạng Public (Sử dụng trong mọi Form).
Minh hoạ: Tạo module mới: Vào menu Project → Add Module. Lưu module này với

tên : modDataTypes.bAs
Gõ đoạn lệnh dưới đây vào trong module vừa tạo:
Option Explicit
Public Type KieuSach
TenSach As String
TacGia As String
NamXB AsInteger
Gia As Single
End Type

Gõ đoạn lệnh dưới đây trong thủ tục Form_Load:
Option Explicit
Dim Sach As KieuSach
Dim KhoSach(100) As KieuSach
Private SubForm_Load()
Sach.TenSach = "Lập trình VB thật là đơn giản"
Sach.TacGia = "CIT VB"
Sach.NamXB = 2013
Sach.Gia = 45000
'/// Gán một số giá trị cho phần tử có chỉ số là 1 cho mảng
KhoSach(1).TenSach = "Bài tập Visual Basic"
KhoSach(1).TacGia = "CITVB"
KhoSach(1).NamXB = 2006
KhoSach(1).Gia = 34500
MsgBox Sach.TenSach & " giá : " & Sach.Gia
MsgBox KhoSach(1).TenSach & " Giá : " & KhoSach(1).Gia
End sub

Ghi chú:
• Đoạn chương trình trên định nghĩa kiểu bản ghi (tương tự như Record trong

PAscal hay struct trong C/C++) bằng câu lệnh Type, từ khoá Public đứng trước
để chỉ ra rằng kiểu dữ liệu này có thể được dùng trong mọi Form, mọi module.
Còn nếu sử dụng từ khoá Private thay vì Public thì kiểu dữ liệu mới này chỉ
được sử dụng trong chính module đó mà thôi.
• Đoạn code tiếp theo khai báo 2 biến thuộc kiểu dữ liệu vừa định nghĩa. Một là
biến thông thường, biến thứ hai là một mảng.



Ngôn ngữ lập trình Visual Basic



17
Kiểu dữ liệu mảng thường được thao tác kết hợp với vòng lặp. Các ví dụ thêm về
mảng kết hợp với vòng lặp sẽ được đề cập ở các phần tiếp sau.
2.3 Định nghĩa Hàm (function) trong Visual Basic
Hàm và thủ tục được gọi là những chương trình con, giúp cho chương trình dễ bảo trì,
dễ hiểu và tránh phải viết lại những đoạn lệnh tương tự nhau.
Thực hành: Định nghĩa hàm tính tổng của 2 số nguyên, kết quả được trả lại (gán) về cho
hàm.
Hướng dẫn: Vì hàm cần tính tổng của 2 số nguyên nên số tham số đầu vào là 2, kiểu của
tham số đầu vào là Integer, và vì chỉ cần lấy giá trị của tham số vào mà không có nhu
cầu thay đổi giá trị của nó do vậy ta sẽ khai báo 2 tham số của hàm thuộc dạng tham
trị.
Minh hoạ:

Option Explicit
Function Tong(byVal a AsInteger, byVal b AsInteger) As Long
Dim S As Long

S = a + b
Tong = S '
End Function
PrivateSubForm_Load()
Dim X AsInteger, Y AsInteger, Z As Long
X = 5
Y = 10
Tong 10,20
Z = Tong(X,Y)
MsgBox "Tổng là : " & Tong(10, 20)
End sub

Chú ý:
• Khi định nghĩa hàm, nếu trước các tham số hình thức (tham số a, b ở trên) mà
không có từ khóa byVal thì VB sẽ hiểu là tham số đó ở dạng tham chiếu (tham
biến) mà ta sẽ nói sau.
• Hàm thì có thể gọi độc lập (ví dụ : Tong 10,20), khi đó các tham số không được
đặt trong cặp ngoặc đơn. Còn nếu hàm tham gia vào biểu thức hay câu lệnh khác
(2 cách gọi còn lại ở trên) thì các tham số phải được đặt trong cặp ngoặc đơn.
• Việc gán kết quả cho tên hàm được gọi là trả kết quả về cho hàm.
2.4 Định nghĩa thủ tục trong Visual Basic
Khi tính tổng của 2 số nguyên như phần trên thì ta cần lấy kết quả trả về là tổng của
chúng, khi tính sin(x) thì ta cần kết quả trả về là sin của số x lúc đó ta cần phải định
nghĩa hàm. Tuy nhiên, trong một số trường hợp khi viết các chương trình con, nếu không
cần phải kết quả trả về từ chương trình con, lúc đó ta nên định nghĩa chương trình con
đó ở dạng thủ tục (Sub).
Thực hành: Hiển thị ngày tháng năm, giờ phút giây hiện tại trong máy tính

Hướng dẫn: Hàm Now cho ta biết thông tin về ngày/tháng/năm và giờ/phút/giây hiện



Ngôn ngữ lập trình Visual Basic



18
tại trong máy tính. Muốn trích riêng ngày, tháng, năm, giờ, phút, giây thì dùng các hàm
tương ứng là Year, Month, day, hour, minute, second
Viết lệnh:
Option Explicit
Private Sub ThoiGian()
Dim D As Date '// Khai báo một biến kiểu Date/Time
D = Now '// Lấy ngày, tháng, năm, giờ, phút, giây hiện hành trong máy tính
MsgBox "Hôm nay là ngày " & Day(D) & " tháng " & Month(D) & " năm " & Year(D)
MsgBox "Bây giờ là " & Hour(D) & " giờ " & Minute(D) &" phút và " & Second(D) &
" giây"
End sub
Private SubForm_Load()
Call ThoiGian '/// Gọi thủ tục Thời Gian (Có thể bỏ qua từ khoá Call)
End sub



Kết quả thực hiện chương trình
Chú thích:
• Vì công việc ở trên chỉ đơn thuần là hiển thị thời gian hiện có trong máy tính mà
không cần lấy giá trị trả về từ chương trình con, do vậy chương trình con được
định nghĩa ở đây nên là dạng thủ tục (Sub).
• Việc gọi độc lập hàm hay thủ tục có thể kèm thêm từ khoá Call, nhưng không
bắt buộc (Từ khoá Call được VB giữ lại từ phiên bản Basic for Dos). Tuy nhiên

khi chúng ta gọi chương trình con với từ khoá Call thì các tham số (nếu có) bắt
buộc phải đặt trong cặp ngoặc đơn.
• Câu lệnh Date = <Thời gian mới> và Time = <Giờ phút mới> để đặt lại thời gian
của máy tính. Ví dụ: Date = #February 12, 1985# và Time = #4:35:17
PM# để thay đổi thời gian trong máy tính.
2.5 Truyền tham trị cho chương trình con
Khi ta có một biến số và truyền biến số này cho một chương trình con nhưng ta không
muốn giá trị trong biến số này bị thay đổi khi gọi chương trình con đó thì lúc định nghĩa
chương trình con, tham số hình thức tương ứng phải ở dạng tham trị (có từ khoá byVal
đứng trước).
Thực hành: Viết chương trình tăng giá trị của một số lên 1 đơn vị và hiển thị.
Hướng dẫn: Hãy gõ đoạn lệnh dưới đây và chạy, bạn sẽ quan sát thấy rằng, giá trị của
biến số X sẽ không bị thay đổi giá trị sau khi kết thúc gọi thủ tục Tang, mặc dù trong
chương trình có làm thay đổi giá trị của tham số truyền vào. Tham số truyền vào chỉ bị
thay đổi tạm thời trong thủ tục đó mà thôi, bởi vì tham số ta khai báo ở dạng THAM
TRỊ.


Ngôn ngữ lập trình Visual Basic



19


Viết lệnh:
Option Explicit
'/// Khai báo thủ tục với tham số ở dạng tham trị (Có từ khoá byVal)
PrivateSub Tang(ByVal a AsInteger)
a = a + 1

MsgBox "Giá trị của tham số trong thủ tục là : " & a
End sub
PrivateSubForm_Load()
Dim X AsInteger
X = 10
MsgBox "X ban đầu là " & X
Tang X
MsgBox "X sau khi gọi thủ tục vẫn là : " & X
End sub







Kết luận:



• Khi tham số hình thức khai báo ở dạng tham trị thì tham số thực sự truyền vào sẽ
không bị thay đổi bởi chương trình con đó (cho dù trong chương trình con có
lệnh làm thay đổi tham số truyền vào).
• Khi khai báo tham số ở dạng tham trị thì tham số thực sự truyền vào có thể là
hằng số, biến số hay biểu thức


Ngôn ngữ lập trình Visual Basic




20


2.6 Truyền tham chiếu cho chương trình con
Không giống như truyền theo tham trị ở phần 5, nếu một chương trình con có làm thay
đổi giá trị của tham số thực sự truyền vào và ta muốn giữ lại sự thay đổi này thì cần
khai báo tham số hình thức ở dạng tham chiếu.
Thực hành: Viết chương trình tăng giá trị của một số lên 1 đơn vị và hiển thị.
Hướng dẫn: Viết chương trình giống như phần 5, nhưng thay byVal bởi byRef (hoặc có
thể xoá từ khoá byVal đứng trước)
Option Explicit
'/// Khai báo thủ tục với tham số ở dạng tham trị (Có từ khoá byVal)
PrivateSub Tang(ByRef a AsInteger)
a = a + 1
MsgBox "Giá trị của tham số trong thủ tục là : " & a
End sub
PrivateSubForm_Load()
Dim X AsInteger
X = 10
MsgBox "Giá trị của biến số X ban đầu là : " & X
Tang X
MsgBox "Giá trị của biến số X sau khi gọi thủ tục vẫn là : " & X
End sub










Ngôn ngữ lập trình Visual Basic



21

Qui tắc chung khi khai báo các tham số và chương trình con:
• Nếu có sự thay đổi giá trị của các tham số truyền vào chương trình con thì tham
số hình thức được khai báo sẽ ở dạng tham trị (có từ khoá byVal đứng trước).
• Nếu có nhu cầu thay đổi tham số truyền vào cho chương trình con thì tham số
truyền vào sẽ ở dạng tham chiếu (có từ khoá byRef đứng trước, mặc định không
có từ khoá byVal hay byRef thì được coi là byRef).
• Chương trình con cần bao nhiêu Dữ kiện đầu vào thì mới giải quyết được Thực
hành đặt ra thì sẽ khai báo bấy nhiêu tham số tương ứng.
• Các tham số có thể khai báo là các tham số ngầm định (tức khi gọi chương trình
con thì có thể bỏ qua tham số nay).
Ví dụ:
Sub ThongBao(Optional TB As String = "Hôm nay không có gì để Thông báo, nếu cò
gì cần thông báo, chúng tôi sẽ ")
MsgBox TB
End sub
• Hàm thì có thể tham gia vào biểu thức tính toán, thủ tục thì không.
2.7 Cấu trúc rẽ nhánh If Then và If ElseIf Then
Cấu trúc IF Then dùng để thực hiện việc thay đổi luồng thực thi của chương trình tuỳ
vào điều kiện đang được xét.
Thực hành: Giải phương trình bậc hai sử dụng cấu trúc IF.
Hướng dẫn: Chương trình giải phương trình bậc hai có thể viết trực tiếp ngay bên trong

thủ tục Form_load hoặc có thể viết trong một chương trình con riêng. Ở đây ta viết
trong một thủ tục và thủ tục này sẽ được gọi trong thủ tục chính Form_Load.
Chú thích:
• Toán tử ^ sử dụng để tính số mũ của một số. Ví dụ: x^5, a ^ b
• Thủ tục GiaiPT ở trên chưa phải là thủ tục viết tối ưu nhất (nhằm mục đích cho
đơn giản). Chương trình con giải phương trình bậc 2 đúng nhất nếu viết theo
thủ tục thì phải khai báo là: Sub GiaiPT(ByVal a As Single, byVal b As Single,
byVal c As Single, x1 As Single, x2 As Single, CóNghiệmHayKhông As
Boolean). Còn nếu viết theo hàm thì phải khai báo là: Function GiaiPT(ByVal
a As Single, byVal b As Single, byVal c As Single, x1 As Single, x2 As Single)
As Boolean. Ở đây ta giảm đi một tham số vì dấu hiệu có nghiệm hay không
được trả về từ hàm. 2 cách khai báo này coi như là một bài tập về nhà để bạn
đọc tự làm !.
• Có thể viết câu lệnh If theo dạng : If <Đkiện> Then <Câu_Lệnh>
2.8 Cấu trúc đa rẽ nhánh Select Case
Thực hành: Viết chương trình hiển thị thứ trong tuần ứng với mỗi số người dùng
nhập từ bàn phím.
Viết lệnh:
PrivateSubForm_Load()
Dim Thu As Integer
Thu = InputBox("Nhập vào một con số : ", "Sử dụng cấu trúc SelectCase", 2)


Ngôn ngữ lập trình Visual Basic



22
Select Case Thu
Case 2

MsgBox "Thứ 2"
Case 3
MsgBox "Thứ 3"
Case 4: MsgBox "Thứ 4"
Case 5: MsgBox "Thứ 5"
Case 6: MsgBox "Thứ 6"
Case 7: MsgBox "Thứ 7"
Case 8: MsgBox "Chủ nhật. Chúc bạn một ngày vui vẻ !"
Case Else
MsgBox "Bạn phải nhập đúng (2 > 8)", vbCritical, "Khuyến cáo !"
End Select
End Sub

Ghi chú:
• Biểu thức để kiểm tra (đứng sau SelectCase) có thể là một biểu thức số thực, số
nguyên, ký tự, xâu ký tự v.v
• Có thể viết nhiều câu lệnh trên cùng một dòng bằng cách thêm vào dấu hai chấm
":" giữa các câu lệnh (Như các phần Case ở trên)

Thực hành: Viết chương trình tra cứu từ điển tin học Anh-Việt. Người dùng gõ từ
Tiếng Anh, chương trình sẽ hiển thị nghĩa tiếng Việt của từ đó.

Viết lệnh:
PrivateSubForm_Load()
Dim TiengAnh As String
TiengAnh = InputBox("Nhập từ tiếng Anh: ", "Sử dụng cấu trúc Select", "computer")
SelectCase TiengAnh
Case "computer"
MsgBox "Nghĩa của computer là Máy tính"
Case "ram"

MsgBox "Nghĩa của ram là Bộ nhớ trong"
Case "cpu", "CPU"
MsgBox "Nghĩa của cpu là: Bộ xử lý trung tâm"
Case Else
MsgBox "Xin lỗi, từ này chưa có trong từ điển", vbInFormation
End Select
End Sub
c) Sử dụng từ khoá is để kiểm tra biểu thức thuộc một miền giá trị. Đây là tính năng rất
mạnh của cấu trúc SelectCase so với các ngôn ngữ khác.
Thực hành: Giải phương trình bậc hai sử dụng cấu trúc SelectCase (Đối với các ngôn
ngữ khác như PAscal hay C/C++ thì không hỗ trợ cách thức này)


Ngôn ngữ lập trình Visual Basic



23

2.9 Cấu trúc lặp For
Vòng lặp for dùng để lặp đi lặp lại một khối lệnh với số lần lặp xác định.
Thực hành: Viết chương trình tính tổng của N số tự nhiên đầu tiên, số N nhập từ
bàn phím.
Hướng dẫn: Sử dụng hàm InputBox để nhập số N, Sau đó cộng dồn các số i (i chạy từ
1 đến N) vào tổng S. Vì việc cộng lặp lại với số lần lặp cố định là N do vậy ta sử dụng
vòng lặp For.

Viết lệnh : Option Explicit
PrivateSubForm_Load()
Dim i AsInteger, N As Integer, S As Long

N = InputBox("Nhập vào số N : ")
S = 0
For i = 1 To N
S = S + i
Next
MsgBox "Tổng của " & N & " số tự nhiên đầu tiên là : " & S
End Sub

×