84
Phạm Thị Kim Ngoan 1 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ƯỜI DÙNG Chương 5: ĐỐI TƯỢNG VÀ BIẾN ĐỐI TƯỢNG

Bài giảng ACCESS - VBA

  • Upload
    hg4ever

  • View
    1.617

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 1

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ƯỜI DÙNG

Chương 5: ĐỐI TƯỢNG VÀ BIẾN ĐỐI TƯỢNG

Page 2: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 2

Chươ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

Page 3: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 3

I. 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.

Page 4: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 4

I. 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

của form, report hoặc module chung của CSDL và chúng có

thể gọi lẫn nhau.

Page 5: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 5

II. 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

cùng với Form/Report.

Page 6: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 6

III. 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)

- Các thủ tục sử dụng toàn cục

- Các thủ tục sử dụng cấp module 2. Module loại: - Các tuỳ chọn - Các khai báo cấp module - Các thủ tục xử lý sự kiện - Các thủ tục sử dụng cấp module

Page 7: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 7

Module chuẩn

Page 8: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 8

Module loại

Page 9: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 9

III. 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]

Các lệnh

Tên_hàm = biểu thức giá trị

End Sub

c. Cấu trúc thủ tục xử lý sự kiện :

Private Sub Tênđốitượng__tênsựkiện ([Các tham số])

Các lệnh

End Sub

Page 10: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 10

VI. 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 thủ tục.

- Thực thi: Mở Form, tác động sự kiện vừa gắn lên nút lệnh.

Page 11: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 11

VI. 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

Page 12: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 12

VI. Tạo và thực hiện các thủ tục

Chạy thủ tục:

Thủ tục không có tham số:

Tên_Module.Tên_thủ_tục

Call Tên_Module.Tên_thủ_tục

Call Tên_Module.Tên_thủ_tục ()

Ví dụ: Tinhtoan.Tong

Call Tinhtoan.Tong

Call Tinhtoan.Tong()

Page 13: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 13

VI. Tạo và thực hiện các thủ tục

Thủ tục có tham số:

Call Tên_Module.Tên_thủ_tục (Các tham số thực sự)

Ví dụ: Call Tinhtoan.Tongab(15, 56)

Hàm (Function procedure):

? Tên_Module.Tên_hàm ()

? Tên_Module.Tên_hàm

? Tên_Module.Tên_hàm (Các tham số thực sự)

Ví dụ: ?Tinhtoan.Tong1()

?Tinhtoan.Tong2(25, 35)

Page 14: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 14

VI. Tạo và thực hiện các thủ tục

Gọi thủ tục từ các thủ tục khác:

Thủ tục:

Call Tên_Module.Tên_thủ_tục (Các tham số thực sự)

Hàm: đặt trong các biểu thức

Tên_Module.Tên_hàm (Các tham số thực sự)

Page 15: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 15

V. 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

Page 16: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 16

Chươ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

Page 17: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 17

I. Các tuỳ chọn

Option Explicit: người dùng phải khai báo tường minh các

biến

Option Compare Binary: phân biệt chữ thường và hoa khi

viết chương trình

Option Compare Text: phân biệt chữ thường và hoa khi so

sánh

Option Base n: qui định chỉ số đầu tiên trong kiểu dữ liệu

mảng

Page 18: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 18

II. Các kiểu dữ liệu cơ bản

Kiểu dl Kích thước Phạm vi

Byte 1 byte 0 … 255

Boolean 1 byte True/False

Integer 2 bytes -32.768 … 32.767

Long 4 bytes -2.147.483.648 … 2.147.483.647

Single 4 bytes -3,402823E+38 …3,402823E+38

Double 8 bytes -1,7976E+308 … 1,7976E+308

Currency 8 bytes -9,223E+14 … 9,223E+14

Page 19: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 19

II. Các kiểu dữ liệu cơ bản

Kiểu dl Kích thước Phạm vi

Date 8 bytes 1/1/100…31/12/9999

Object 4 bytes Các đối tượng

String(variable – length) 10 bytes + string length 0 … 231 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

Page 20: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 20

III. Khai báo

1. Khai báo hằng:

Public/Private CONST Tên_hằng [AS Kiểu dữ liệu] = Biểu thức

giá trị

Ví dụ: Const Pi=3.14

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]

Ví dụ: Public Hoten As String, DTB As Double

Private Diachi As String

Page 21: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 21

III. 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ự.

Page 22: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 22

IV. 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”)

Page 23: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 23

IV. 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.

Page 24: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 24

IV. 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ị:

0 / vbOnlyOK OK

1 / vbOKCancel OK, Cancel

2 / vbAbortRetryIgnore Abort, Retry, Ignore

3 / vbYesNoCancel Yes, No, Cancel

4 / vbYesNo Yes, No

5 / vbRetryCancel Retry, Cancel

Page 25: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 25

IV. Các hàm/thủ tục nhập xuất dữ liệu

- Xác định biểu tượng:

0 không

16 / vbCritical Critical (Stop)

32 / vbQuestion Warning query

48 / vbExclamation Warning Message

64 / vbInformation Information

Page 26: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 26

IV. Các hàm/thủ tục nhập xuất dữ liệu

- Xác định nút ngầm định:

0 / vbDefaultButton1 nút thứ 1

256 / vbDefaultButton2 nút thứ 2

512 / vbDefaultButton3 nút thứ 3

* Giá trị của hàm khi nút lệnh được chọn:

1 OK 4 Retry

2 Cancel 5 Ignore

3 Abort 6 Yes 7 No

c. In ra màn hình trực tiếp: Debug.print biểu thức

Page 27: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 27

IV. 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

Page 28: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 28

V. Một số hàm / thủ tục của VBA

Cá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

MID(St,i,n) lấy n ký tự bắt đầu từ vị trí i trong chuỗi

STR(n) đổi số thành chuỗi

Page 29: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 29

V. 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ườngUCASE(St) đổi các ký tự trong chuỗi thành chữ inCác hàm tính toán:ABS(n) trị tuyệt đốiFIX(r) lấy phần nguyên của số thựcINT(r) lấy phần nguyên gần nhất và nhỏ hơn rSQR(n) căn bậc 2 của nEXP(n) hàm e mũ nVAL(St) đổi chuỗi thành số Các hàm về ngày, giờ:NOW() lấy ngày giờ của hệ thốngDATE() ngày hệ thốngTIME() giờ hệ thống

Page 30: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 30

V. Một số hàm / thủ tục của VB

DATEPART(dt) lấy một phần của ngày/tháng/nămDATEPART(“d”, dt) lấy phần ngày

DAY(dt)DATEPART(“m”, dt) lấy phần tháng

MONTH(dt)DATEPART(“yyyy”, dt) lấy phần năm

YEAR(dt)Các hàm kiểm tra:ISNUMERIC(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ú ý: ‘ dòng chú thích Viết lệnh trên nhiều dòng dùng dấu space và gạch dưới ( _)

Page 31: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 31

Chươ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:

1. Cấu trúc lựa chọn:

2. Cấu trúc lặp:

3. Lệnh Exit:

II. Kiểu dữ liệu có cấu trúc:

1. Mảng:

2. Bản ghi:

Page 32: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 32

I. Các cấu trúc điều khiển

1. Cấu trúc lựa chọn:

a. IF .. THEN

Cú pháp1:

IF (điều kiện) THEN khối lệnh viết trên cùng 1 dòng

Cp2: IF (điều kiện) THEN

khối lệnh

ENDIF

Page 33: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 33

I. 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

Page 34: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 34

I. 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

c. IF .. THEN .. ELSEIF

Cú pháp: IF (điều kiện1) THEN

khối lệnh 1

ELSEIF (điều kiện2) THEN khối lệnh 2…ELSE

khối lệnh

ENDIF

Page 35: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 35

I. Các cấu trúc điều khiểnVí dụ: IF a >= b THEN

Debug.Print a

ELSE

Debug.Print b

ENDIFVí 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

ENDIF

Page 36: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 36

I. 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

Page 37: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 37

I. 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”

CASE 4: Debug.Print “bốn”

CASE 5: Debug.Print “năm”

CASE ELSE

Debug.Print “lớn hơn năm”

END SELECT

Page 38: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 38

I. Các cấu trúc điều khiển

2. Cấu trúc lặp:

a. FOR .. NEXT

Cú pháp:

FOR biến_đếm=giá trị đầu TO giá trị cuối [STEP bước lặp]

khối lệnh

NEXT biến_đếm

Ví dụ: Tính tổng 10 số nguyên dương đầu tiên

Tong = 0

FOR i =1 TO 10 [Step 1]

Tong = Tong + i

NEXT i

Page 39: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 39

I. Các cấu trúc điều khiển

b. DO WHILE .. LOOP:

Cú pháp 1: DO WHILE (điều kiện)

khối lệnh

LOOP

Cú pháp 2: DO

khối lệnh

LOOP WHILE (điều kiện)

Cú pháp 3: WHILE (điều kiện)

khối lệnh

WEND

Page 40: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 40

I. 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: i =1

DO WHILE (i < =10)

Tong = Tong + i : i =i + 1

LOOP

Tong = 0: i =0

DO

Tong = Tong + i : i =i + 1

LOOP WHILE (i < = 10)

Page 41: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 41

I. 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

Page 42: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 42

I. 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

LOOP UNTIL ( i > 10)

Page 43: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 43

II. Kiểu dữ liệu có cấu trúc

1. Mảng:

Khai báo:

DIM Tên_mảng (chỉ số1, chỉ số2, …) AS kiểu dữ liệu

Truy xuất:

Tên_mảng(chỉ số)

Ví dụ:

Option Base 1

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)

Truy xuất đến phần tử hàng 2, cột 3 của mảng B: B(2, 3)

Page 44: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 44

II. 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:

REDIM Tên_mảng(chỉ số1, chỉ số2, …)

Ví dụ:

Option Base 1

Dim A () As Integer

REDIM A(5)

Xóa mảng: Erase Tên_mảng

Page 45: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 45

II. 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:

Tên_biến.Tên_thành phần

Page 46: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 46

II. Kiểu dữ liệu có cấu trúc

Ví dụ:

TYPE Hocsinh

Hoten as String

Ngaysinh as Date

Toan as Single

ENDTYPE

Khai báo một biến HS kiểu hocsinh

Dim HS as Hosinh

Truy xuất thành phần Hoten của biến HS

HS.Hoten

Page 47: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 47

Chươ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

Page 48: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 48

I. 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

Page 49: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 49

I. Tham biến và tham trị

Sub Thamso(ByVal a As Integer, b As Integer)

a = a + 1

b = a

End Sub

‘----------------------

Sub goi()

Dim a As Integer : Dim b As Integer

a = 5: b = 7

Call Thamso(a, b)

Debug.Print "a=", a

Debug.Print "b=", b

End Sub

Page 50: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 50

II. Đệ qui

Trong thủ tục có lời gọi đến chính thủ tục đó

Ví dụ thủ tục đệ qui

Function Dequi(a As Byte, n As Byte)

If n = 0 Then

Dequi = 1

Else

Dequi = Dequi(a, n - 1) * a

End If

End Function

Page 51: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 51

III. Thi hành Macro trong VB

Cú pháp: Docmd.Tên_phương_thức [các tham số]

Các phương thức của Docmd có tên và chức năng giống

như các thao tác (Action) trong Macro

Sub Vedau_Click()

Docmd.GotoRecord , , ac First

EndSub

Page 52: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 52

Thiế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‘-----------------Private Sub Dongy_Click() If matkhau = "TTTH" Then DoCmd.OpenForm "Giaodien" DoCmd.Maximize 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 End IfEnd Sub

Page 53: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 53

Thiế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

Page 54: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 54

IV. Kích hoạt các ứng dụng khác

1. Hàm Shell: thực hiện một tập tin chương trình

Cú pháp:

SHELL (đường dẫn đến tập tin chương trình [,kiểu của sổ])

2. Lệnh AppActivate: kích hoạt ứng dụng thành ứng dụng hiện hành

Cú 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ụngCú pháp: SENDKEY chuỗi các phím [,True/False]

Page 55: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 55

V. 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

Into)

Page 56: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 56

V. Gỡ rối mã VB

Ví dụ dùng phát biểu On Error để đặt bẫy lỗi

Sub Vedau_Click()

On error goto err_VD

Docmd.GotoRecord , , ac First

err_VD:

Exit Sub

EndSub

Page 57: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 57

Chươ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:

Page 58: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 58

I. Đối tượng và tập hợp

Cá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:

C1: Tên_tập_hợp!tên_đối_tượng

C2: Tên_tập_hợp(tên_đối_tượng)

Page 59: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 59

I. Đối tượng và tập hợp

C3: Tên_tập_hợp(chỉ số)

Tập thuộc tính:

Xác lập giá trị cho thuộc tính:

Tên_đối_tượng.tên_thuộc_tính = giá trị

Lấy giá trị của thuộc tính:

Tên_biến = tên_đối_tượng.tên_thuộc_tính

Page 60: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 60

II. 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:

Giữa các đối tượng: !

Thuộc tính, phương thức: .

Page 61: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 61

In tên các điều khiển có trong Form Mật khẩu

Sub Dkhien_Matkhau()

Dim Frm As Form

Dim n As Integer, i As Integer

DoCmd.OpenForm ”Matkhau"

Set Frm = Forms(”Matkhau")

n = Frm.Count

For i = 0 To n - 1

MsgBox Frm(i).Name

Next i

End Sub

Page 62: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 62

Liệt kê các bảng có trong CSDL hiện tại

SUB Inbang()

Dim db As Database

Dim t As TableDef

Set db = CurrentDb()

For Each t In db.TableDefs

MsgBox t.Name

Next t

ENDSUB

Page 63: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 63

III. 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)

Page 64: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 64

III. 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()

Page 65: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 65

III. 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.

Page 66: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 66

III. Sử dụng các biến đối tượng

Loạ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

Dim Rs As Recordset

Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)

Page 67: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 67

III. 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

Page 68: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 68

III. Sử dụng các biến đối tượng

Các phương thức di chuyển:

MOVEFIRST: Đến bản ghi đầu tiên trong biến Recordset

MOVEPREVIOUS

MOVENEXT

MOVELAST

MOVE(n): Đến bản ghi n trong biến Recordset

Ví dụ: Rs.MoveNext

Phương thức đóng : CLOSE

Tên_biến_RS.CLOSE

Ví dụ: Rs.Close

Page 69: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 69

III. 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

Page 70: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 70

III. 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

Rs.Close

ENDSUB

Page 71: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 71

III. 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

Page 72: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 72

III. Sử dụng các biến đối tượng

Hiệu chỉnh 1 bản ghi:

- Chuyển đến bản ghi muốn hiệu chỉnh

- Dùng phương thức EDIT

- Tiến hành hiệu chỉnh

- Dùng phương thức UPDATE

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

- Thay TenMH = “Anh Văn 1”

- Gọi phương thức UPDATE

Page 73: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 73

III. 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.EDITRs!TenMH = “Anh Văn 1”Rs.UPDATEEXIT DO

ELSERs.MoveNext

LOOPRs.CloseENDSUB

Page 74: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 74

III. 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.

Page 75: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 75

III. Sử dụng các biến đối tượng

Thêm 1 bản ghi mới:

- Dùng phương thức ADDNEW

- Nhập dữ liệu cho bản ghi này

- Dùng phương thức UPDATE

Ví dụ: Thêm môn học mới vào bảng MONHOC

MaMH : AV2

TenMH : Anh Văn 2

Heso : 1

Page 76: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 76

III. Sử dụng các biến đối tượng

SUB ThemMH()

Dim Db As Database

Dim Rs As Recordset

Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)

Rs.ADDNEW

Rs!MaMH = “AV2”

Rs!TenMH = “Anh Văn 2”

Rs!Heso = 1

Rs.UPDATE

Rs.Close

ENDSUB

Page 77: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 77

III. 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

Page 78: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 78

III. Sử dụng các biến đối tượng

Xoá 1 bản ghi:

- Chuyển đến bản ghi cần xoá

- Dùng phương thức DELETE

Ví dụ: Xóa từ bảng MONHOC môn học có mã “AV1”

Page 79: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 79

III. Sử dụng các biến đối tượng

SUB XoaMH()Dim Db As Database , Rs As RecordsetSet Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)

DO WHILE (Rs.EOF = False)

IF Rs!MaMH = “AV1” THEN

Rs.DELETE

EXIT DO

ELSE

Rs.MoveNext

LOOP

Rs.Close

ENDSUB

Page 80: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 80

III. 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 Xóa để xóa từ bảng môn học một môn học có mã được nhập vào Textbox trên Form.

Page 81: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 81

III. Sử dụng các biến đối tượng

Tìm kiếm 1 bản ghi:

Phương thức SEEK (áp dụng với loại mở nguồn dữ liệu là

DB_OPEN_TABLE)

- Chỉ ra tên chỉ mục

- Tên_biến_RS.SEEK “toán tử so sánh”,”giá trị so sánh”

Thuộc tính kiểm tra: NOMATCH

NOMATCH=True: không tìm thấy bản ghi

Page 82: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 82

III. Sử dụng các biến đối tượng

Ví dụ: In ra màn hình trực tiếp môn học có mã “AV2”

SUB InMH_2()

Dim Db As Database

Dim Rs As Recordset

Set Rs = Db.OpenRecordset (“MONHOC”, DB_OPEN_TABLE)

Rs.Index = “ma”

Rs.Seek “=“, “AV2”

IF Rs.NOMATCH =False THEN

Debug.Print Rs!MaMH, Rs!TenMH, Rs!Heso

ELSE

Debug.Print “Không có môn học này!”

ENDIF

Rs.Close

ENDSUB

Page 83: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 83

III. Sử dụng các biến đối tượng

3. Biến đối tượng QueryDef:

Khai báo:

DIM Tên_biến_QD AS QueryDef

Tạo 1 query: dùng phương thức CREATEQUERYDEF của

đối tượng Database

SET

tên_biến_QD=tên_biến_DB.CREATEQUERYDEF(“tên

query”)

Tên_biến_QD.SQL=”câu lệnh SQL”

Tên_biến_DB.Tên_biến_QD.DELETE(“tên query”)

Page 84: Bài giảng ACCESS - VBA

Phạm Thị Kim Ngoan 84

III. Sử dụng các biến đối tượng

Thi hành: EXECUTE

Tên_biến_QD.EXECUTE

Đóng: CLOSE

Tên_biến_QD.CLOSE

Xoá: DELETE