Phần 2: VISUAL BASIC FOR APPLICATION VBA Chương 1: TỔNG QUAN VỀ VB Chương 2: CÁC KHAI BÁO TRONG VB Chương 3: CÁC CẤU TRÚC ĐIỀU KHIỂN VÀ KIỂU DỮ LIỆU CÓ CẤU TRÚC Chương 4: THỦ TỤC CỦA NGƯ
Trang 1Phần 2: VISUAL BASIC FOR APPLICATION
(VBA)
Chương 1: TỔNG QUAN VỀ VB
Chương 2: CÁC KHAI BÁO TRONG VB
Chương 3: CÁC CẤU TRÚC ĐIỀU KHIỂN VÀ KIỂU DỮ LIỆU CÓ CẤU TRÚC
Chương 4: THỦ TỤC CỦA NGƯỜI DÙNG
Chương 5: ĐỐI TƯỢNG VÀ BIẾN ĐỐI TƯỢNG
Trang 2Chương 1: TỔNG QUAN VỀ VBA
I Giới thiệu chung
II Module
III Cấu trúc của Module
VI Tạo và thực hiện các thủ tục
V Một số hiệu ứng khi viết và sửa chữa mã lệnh
Trang 3I Giới thiệu chung
Visual Basic là ngôn ngữ lập trình dùng để ràng buộc các đối tượng trong ứng dụng với nhau thành một hệ thống hợp nhất Các chương trình của VBA (Visual Basic for Application) được tổ chức và hoạt động trong Access nhằm mục đích xây dựng các ứng dụng phức tạp.
Có thể dùng VB để thực hiện các công việc sau:
- Làm cho ứng dụng dễ bảo trì hơn
- Tạo ra các hàm/thủ tục của người sử dụng để xử lý các thao
tác phức tạp mà chưa được MS Access cung cấp sẵn.
- Xử lý lỗi theo ý người sử dụng
Trang 4I Giới thiệu chung
- Tạo hay thao tác với các đối tượng
- Thực hiện các thao tác cấp hệ thống : thực hiện một ứng
dụng khác, liên kết giữa các ứng dụng.
Đặc điểm:
- Chương trình của VBA hoạt động chủ yếu theo hướng sự kiện : bấm chuột tại các nút lệnh, di chuyển vào hay ra đối tượng điều khiển của form, report …
- Các thủ tục và hàm của VBA nằm rải rác trong các module
Trang 5II Module
1 Khái niệm Module: Là tập các tuỳ chọn, các khai báo, các thủ tục cùng được lưu trữ trong một đơn vị chương trình.
2 Phân loại Module:
- Module chuẩn: Có thể thi hành bất cứ nơi nào trong ứng dụng.
- Module lớp: Các thủ tục định nghĩa trong Module lớp sẽ trở thành các phương thức của đối tượng này.
* Mỗi Form/Report đều có thể kết hợp với một Module lớp (Form Module/Report Module), Module lớp này được lưu
Trang 6III Cấu trúc của Module
1 Module chuẩn:
- Các tuỳ chọn
- Các khai báo toàn cục (Public)
- Các khai báo cấp module (Dim)
Trang 7Module chuẩn
Trang 8Module loại
Trang 9III Cấu trúc của Module
3 Cấu trúc một thủ tục:
a Cấu trúc Sub procedure :
Sub Tên_thủ _tục ([Các tham số])
Các lệnh
End Sub
b Cấu trúc Function procedure :
Function Tên_hàm ([Các tham số]) [AS kiểu dữ liệu]
Trang 10VI Tạo và thực hiện các thủ tục
1 Thủ tục xử lý sự kiện: Thường là các thủ tục gắn với các điều
khiển của Form (nút lệnh, …) đặt trong Module loại
- Tạo mới:
• Mở Form có điều khiển cần gắc thủ tục ở dạng thiết kế.
• Chọn Properties của điều khiển cần gắn thủ tục, chọn ngăn
sự kiện (Event)
• Chọn sự kiện cần gắn (On Click, …), chọn nút …, chọn Code
Builder, MS Access đưa ra khuôn dạng của thủ tục với tên
tương ứng, tại vị trí con trỏ: gõ các lệnh cần thực hiện trong
Trang 11VI Tạo và thực hiện các thủ tục
2 Thủ tục Sub procedure và Function procedure: Đặt trong Module loại hoặc chuẩn.
- Tạo mới: Mở màn hình viết mã lệnh, viết thủ tục theo cấu trúc tương ứng.
- Thực thi:
• Biên dịch cho đến khi không còn lỗi cú pháp
Menu Debug → Complie Loaded Modules
• Chạy xem kết quả trong khung trực tiếp:
Mở mà hình trực tiếp: Menu View → DebugWindow /
Immediate Window
Trang 12VI Tạo và thực hiện các thủ tục
Trang 13VI Tạo và thực hiện các thủ tục
Trang 14VI Tạo và thực hiện các thủ tục
Trang 15V Một số hiệu ứng khi viết và sửa chữa mã lệnh
- Tự động xây dựng các phát biểu:
Tools -> Options -> Module -> Auto list Members
- Thông tin nhanh:
Tools -> Options -> Module -> Auto QuickInfo
- Tự động kiểm tra cú pháp:
Tools -> Options -> Module -> Auto Syntax Check
- Di chuyển giữa các thủ tục trong module:
Ctrl + Page Down / Ctrl + Page Up
Trang 16Chương 2: CÁC KHAI BÁO TRONG VB
I Các tuỳ chọn
II Các kiểu dữ liệu cơ bản
II Khai báo
IV Các hàm/thủ tục nhập xuất dữ liệu
V Một số hàm / thủ tục của VB
Trang 18II Các kiểu dữ liệu cơ bản
Single 4 bytes -3,402823E+38 …3,402823E+38
Double 8 bytes -1,7976E+308 … 1,7976E+308
Trang 19II Các kiểu dữ liệu cơ bản
String(variable – length) 10 bytes + string length 0 … 2 31 ký tự
String(fixed – length) Length of string 1…65.400 ký tự
Variant (with numbers) 16 bytes Như kiểu double
Variant (with characters) 10 bytes + string length Như kiểu string có độ dài
thay đổi
Trang 20III Khai báo
Public Const S = “Đây là ví dụ”
Private Const so As Integer = 5
2 Khai báo biến:
Public/Private/Dim/Static Tên_biến [AS Kiểu dữ liệu]
Trang 21III Khai báo
Phạm vi sử dụng:
- Mức thủ tục : Các khai báo bên trong thủ tục.
- Mức module : Các khai báo Private Const trong phần khai
báo của module.
- Mức project : Khai báo Public
Tên:
- Gồm chữ cái, chữ số và dấu gạch chân, bắt đầu là chữ cái.
- Không trùng với từ khoá của Access.
- Độ dài không vượt quá 40 ký tự.
Trang 22IV Các hàm/thủ tục nhập xuất dữ liệu
1 Nhập dữ liệu: hàm InputBox, InputBox$
Cú pháp: INPUTBOX[$](Dòng nhắc [[,tiêu đề]
[, giá trị mặc định][,x, y] ])
- Hàm InputBox trả về giá trị Variant
- Chức năng : Hiển thị dòng nhắc trong một hộp thoại, đợi
nhập liệu và trả về giá trị trong textbox
Ví dụ: Nhập 1 số nguyên từ bàn phím và lưu trong biến a
Dim a as Integer
a = Inputbox(“Nhập a=”, “Nhập số liệu”)
Trang 23IV Các hàm/thủ tục nhập xuất dữ liệu
2 Xuất dữ liệu:
a Thủ tục Msgbox
Cú pháp: MsgBox Dòng thông báo, kiểu hộp thoại, tiêu đề
b Hàm Msgbox
Cú pháp: MsgBox (Dòng thông báo, kiểu hộp thoại, tiêu đề)
Kiểu hộp thoại: Giá trị cho biết các nút lệnh nào sẽ hiển thị và các biểu tượng sẽ hiển thị trong hộp thoại.
Chức năng : Hiển thị một thông điệp trong hộp hội thoại và đợi người sử dụng chọn một nút lệnh.
Khác nhau giữa hàm và thủ tục MsgBox : Hàm MsgBox trả về giá trị cho biết đã chọn nút lệnh nào, còn thủ tục thì không.
Trang 24IV Các hàm/thủ tục nhập xuất dữ liệu
* Tham số kiểu hộp thoại gồm 3 thành phần: Nút lệnh nào sẽ hiển thị, kiểu biểu tượng hiển thị, nút ngầm định.
- Nút lệnh hiển thị:
2 / vbAbortRetryIgnore Abort, Retry, Ignore
3 / vbYesNoCancel Yes, No, Cancel
5 / vbRetryCancel Retry, Cancel
Trang 25IV Các hàm/thủ tục nhập xuất dữ liệu
- Xác định biểu tượng:
16 / vbCritical Critical (Stop)
32 / vbQuestion Warning query
48 / vbExclamation Warning Message
64 / vbInformation Information
Trang 26IV Các hàm/thủ tục nhập xuất dữ liệu
Trang 27IV Các hàm/thủ tục nhập xuất dữ liệu
Ví dụ: In ra dưới dạng hộp thoại tổng của a+ b (dùng thủ tục) Msgbox “Tổng của a+b=” & a+b,
vbOkCancel + vbInformation, “Kết quả”
In ra dưới dạng hộp thoại tổng của a+ b có kiểm tra nút lệnh bấm (dùng hàm Msgbox)
IF Msgbox (“Tổng của a+b=” & a+b,
vbOkCancel+vbInformation, “Kết quả”)= vbOk THEN
Trang 28V Một số hàm / thủ tục của VBACác hàm về chuỗi:
LTRIM(St) cắt các ký tự trắng bên trái chuỗi
RTRIM(St) cắt các ký tự trắng bên phải chuỗi
TRIM(St) cắt các ký tự trắng bên phải và bên trái chuỗi LEN(St) độ dài chuỗi
LEFT(St,n) lấy n ký tự bên trái chuỗi
RIGHT(St,n) lấy n ký tự bên phải chuỗi
Trang 29V Một số hàm / thủ tục của VB
LCASE(St) đổi các ký tự trong chuỗi thành chữ thường UCASE(St) đổi các ký tự trong chuỗi thành chữ in
Các hàm tính toán:
ABS(n) trị tuyệt đối
FIX(r) lấy phần nguyên của số thực
INT(r) lấy phần nguyên gần nhất và nhỏ hơn r
Trang 30ISNUMERIC(n) kiểm tra n có phải là một số không?
ISDATE(d) kiểm tra d có phải là kiểu ngày không? Chú ý:
Trang 31Chương 3: CÁC CẤU TRÚC ĐIỀU KHIỂN
VÀ KIỂU DỮ LIỆU CÓ CẤU TRÚC
I Các cấu trúc điều khiển:
Trang 32I Các cấu trúc điều khiển
Trang 33I Các cấu trúc điều khiển
Ví dụ:
Cp1: IF a >= b THEN Debug.Print a
Cp2: IF a >= b THEN
Debug.Print a ENDIF
Trang 34I Các cấu trúc điều khiển
b IF THEN ELSE
Cú pháp: IF (điều kiện) THEN
khối lệnh 1 ELSE
khối lệnh 2 ENDIF
Trang 35I Các cấu trúc điều khiển
Ví dụ: IF a >= b THEN
Debug.Print a ELSE
Debug.Print b ENDIF
Ví dụ: IF (a >= b) and (a >=c) THEN
Debug.Print a ELSEIF (b >= a) and (b >=c) THEN Debug.Print b
ELSE Debug.Print c
Trang 36I Các cấu trúc điều khiển
d SELECT CASE … END SELECT:
Cú pháp: SELECT CASE biểu thức giá trị
CASE gtrị1: khối lệnh 1 CASE gtrị2: khối lệnh 2
… CASE ELSE
khối lệnh END SELECT
Trang 37I Các cấu trúc điều khiển
Ví dụ:
SELECT CASE n
CASE 1: Debug.Print “một”
CASE 2: Debug.Print “hai”
CASE 3: Debug.Print “ba”
Trang 38I Các cấu trúc điều khiển
Ví dụ: Tính tổng 10 số nguyên dương đầu tiên
Tong = 0
FOR i =1 TO 10 [Step 1]
Trang 39I Các cấu trúc điều khiển
LOOP WHILE (điều kiện)
Cú pháp 3: WHILE (điều kiện)
khối lệnh
Trang 40I Các cấu trúc điều khiển
Ví dụ: Tính tổng 10 số nguyên dương đầu tiên
Trang 41I Các cấu trúc điều khiển
c DO UNTIL … LOOP:
Cú pháp 1: DO UNTIL (điều kiện)
khối lệnh LOOP
Cú pháp 2: DO
khối lệnh LOOP UNTIL (điều kiện)
3 Lệnh Exit:
Exit Do Exit For
Exit Function Exit Sub
Trang 42I Các cấu trúc điều khiển
Ví dụ: Tính tổng 10 số nguyên dương đầu tiên
Cp1:
Tong = 0: i =1
DO UNTIL (i > 10)
Tong = Tong + i : i =i + 1 LOOP
Cp2: Tong = 0: i = 0
DO Tong = Tong + i : i =i + 1
Trang 43II Kiểu dữ liệu có cấu trúc
Dim A (10) As Integer, B(3, 4) As Integer
Truy xuất đến phần tử thứ 4 của mảng A: A(4)
Trang 44II Kiểu dữ liệu có cấu trúc
Mảng động:
Khai báo: DIM Tên_mảng() AS kiểu dữ liệu
Thay đổi kích thước:
Trang 45II Kiểu dữ liệu có cấu trúc
2 Bản ghi:
Định nghĩa kiểu:
TYPE Tên_kiểu_bản_ghi
Thành phần1 AS kiểu dliệu1 Thành phần2 AS kiểu dliệu2
… END TYPE
Khai báo:
Public/Private/Dim Tên_biến AS Tên_kiểu_bản_ghi
Truy xuất thành phần:
Trang 46II Kiểu dữ liệu có cấu trúc
Trang 47Chương 4: THỦ TỤC CỦA NGƯỜI DÙNG
I Tham biến và tham trị
II Đệ qui
III Thi hành Macro trong VB
IV Kích hoạt các ứng dụng khác
V Gỡ rối mã VB
Trang 48I Tham biến và tham trị
- Truyền theo tham trị(ByVal): các tham số không thay đổi giá trị
- Truyền theo tham biến: giá trị các tham số thay đổi nếu thủ tục gọi có câu lệnh là thay đổi giá trị của chúng
Ví dụ truyền theo tham trị và tham biến
Trang 49I Tham biến và tham trị
Sub Thamso(ByVal a As Integer, b As Integer)
Trang 51III Thi hành Macro trong VB
Trang 52Thiết kế Form đăng nhập hệ thống, yêu cầu người sử dụng phải nhập vào mật khẩu khi muốn sử dụng CSDL
Dim dem As Byte
ElseIf dem < 3 Then
MsgBox "Ban nhap sai roi!"
dem = dem + 1 : matkhau = ""
matkhau.SetFocus
Else
MsgBox "Ban da nhap 3 lan"
DoCmd.Quit acQuitPrompt
Trang 53Thiết kế Form đăng nhập hệ thống, yêu cầu người sử dụng phải
nhập vào mật khẩu khi muốn sử dụng CSDL
Private Sub Form_Load()
dem = 1
End Sub
Trang 54Cú pháp: APPACTIVATE tên ứng dụng
3 Hàm Sendkey: gửi các phím bấm đến một ứng dụng
Cú pháp: SENDKEY chuỗi các phím [,True/False]
Trang 55V Gỡ rối mã VB
Các loại lỗi có thể gặp:
Lỗi biên dịch:
Nguyên nhân: lệnh sai cấu trúc
Hạn chế: chọn “Auto Syntax Check”
Lỗi trong lúc thi hành:
Nguyên nhân: do cố gắng thực hiện một hành động không thể thực hiện được.
Xử lý: dùng phát biểu ON ERROR để đặt bẫy lỗi
Lỗi logic của chương trình: kết quả sai
Nguyên nhân: sai giải thuật
Phát hiện: Chạy từng bước để kiểm tra (Menu Debug -> Step
Trang 57Chương 5: ĐỐI TƯỢNG VÀ BIẾN ĐỐI TƯỢNG
I Đối tượng và tập hợp:
II Biến đối tượng:
III Sử dụng các biến đối tượng:
Trang 58I Đối tượng và tập hợpCác nguồn cung cấp đối tượng trong MS Access:
MS Access: đối tượng hiển thị dữ liệu
MS DAO: đối tượng truy nhập dữ liệu
Visual Basic: đối tượng đem lại sự linh động trong lập trình
Tập hợp: là các đối tượng có cùng kiểu
Tham chiếu tới các đối tượng:
Các đối tượng riêng biệt: tên_đối_tượng
Các đối tượng thuộc về tập hợp:
Trang 60II Biến đối tượng
Biến đối tượng: biến biểu thị một đối tượng cụ thể thuộc vào một kiểu đối tượng
Kiểu đối tượng: phần dữ liệu, các phương thức
Khai báo:
Cú pháp: Dim tên_biến AS tên_kiểu_đối_tượng
Gán các biến đối tượng:
Cú pháp: SET tên_biến = dạng biểu thị
Biểu thị các thành phần đối tượng:
Trang 61In tên các điều khiển có trong Form Mật khẩu
Trang 62Liệt kê các bảng có trong CSDL hiện tại
Trang 63III Sử dụng các biến đối tượng
1 Biến đối tượng Database:
Khai báo:
DIM Tên_biến_DB AS Database
Gán biến đối tượng:
SET
Tên_biến_DB=DBEngine.Workspace(0).OpenDatabase(tập
tin CSDL)
Trang 64III Sử dụng các biến đối tượng
Ví dụ : Khai báo một biến Db làm việc với CSDL hiện hành C1: DIM Db AS Database
SET Db= DBEngine.Workspace(0).Database(0) C2: DIM Db AS Database
SET Db= CurrentDB()
Trang 65III Sử dụng các biến đối tượng
2 Biến đối tượng Recordset: Lưu trữ tập các bản ghi.
Tạo đối tượng Recordset: Dùng phương thức OpenDatabase của đối tượng Database
Khai báo: DIM tên_biến_RS AS Recordset
Ví dụ: Dim Rs As Recordset
Tham chiếu vào một đối tượng cụ thể:
SET tên_biến_RS=tên_biến_DB.OpenRecordSet (“nguồn dl”,
loại) Nguồn dữ liệu: Tên của một bảng, truy vấn, câu lệnh SQL.
Trang 66
III Sử dụng các biến đối tượngLoại dùng 1 trong 3 hằng sau:
DB_OPEN_TABLE: Tham chiếu đến 1 bảng, dữ liệu có thể thay đổi được
DB_OPEN_DYNASET: Tham chiếu đến bảng, query, dliệu có thể thay đổi được
DB_OPEN_SNAPSHOT: Tham chiếu đến 1 bản sao của dliệu, không thay đổi dữ liệu được
Ví dụ:
Dim Db As Database
Trang 67III Sử dụng các biến đối tượng
Tham chiếu đến các trường dữ liệu của biến RecordSet:
Tên_biến_RS!tên_trường
hoặc: Tên_biến_RS.fields(“tên_trường”)
Ví dụ: Truy xuất đến trường mã môn học trong bảng Môn học
Rs!MaMH Hoặc Rs.fields(“MaMH”)
Tham chiếu đến các phương thức, thuộc tính của biến RecordSet:
Tên_biến_RS.tên_phương_thức/ tên_thuộc_tính
Trang 68III Sử dụng các biến đối tượng
Trang 69III Sử dụng các biến đối tượng
Phương thức đếm số bản ghi: RECORDCOUNT
Ví dụ: Đếm số bản ghi trong bảng môn học
Rs.MoveLast Rs.RecordCount
Thuộc phát hiện các giới hạn:
BOF = True : trước bản ghi đầu tiên, hoặc không có bản ghi EOF = True : sau bản ghi cuối cùng, hoặc không có bản ghi Tên_biến_RS.BOF
Ví dụ: Rs.BOF
Trang 70III Sử dụng các biến đối tượng
Ví dụ: In ra màn hình trực tiếp danh mục các môn học
SUB InMH()
Dim Db As Database
Dim Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
DO WHILE (Rs.EOF = False)
Debug.Print Rs!MaMH, Rs!TenMH, Rs!Heso
Rs.MoveNext
LOOP
Trang 71III Sử dụng các biến đối tượng
Viết thủ tục xử lý sự kiện gắn với nút Xem để khi nhập một mã
MH → Xem: thông tin ứng với môn học hiển thị lên các Textbox của Form
Trang 72III Sử dụng các biến đối tượng
Ví dụ: Sửa Tên môn học có Mã số AV1 thành Anh Văn 1
- Tìm bản ghi có MaMH = “AV1”
- Gọi phương thức EDIT
Trang 73III Sử dụng các biến đối tượng
SUB SuaTenMH()
Dim Db As Database
Dim Rs As Recordset
Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)
DO WHILE (Rs.EOF = False)
IF Rs!MaMH = “AV1” THEN
Rs.EDIT Rs!TenMH = “Anh Văn 1”
Rs.UPDATE
EXIT DO
ELSE
Rs.MoveNext LOOP
Trang 74III Sử dụng các biến đối tượng
Viết thủ tục xử lý sự kiện gắn với nút Sửa để khi Xem thông tin môn học hiển thị lên các Textbox của Form, thay đổi thông tin →
nút Sửa để lưu lại thông tin vừa sửa.
Trang 75III Sử dụng các biến đối tượng
Thêm 1 bản ghi mới:
Trang 76III Sử dụng các biến đối tượng
Trang 77III Sử dụng các biến đối tượng
Viết thủ tục xử lý sự kiện gắn với nút Thêm để thêm vào bảng môn học với các thông tin của môn học được nhập vào các Textbox trên Form