C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G
I
I
I
I
I
I
:
:
C
C
Ơ
Ơ
B
L
L
Ậ
Ậ
P
P
T
T
R
R
Ì
Ì
N
N
H
H
V
V
I
I
S
S
U
U
A
. Phím tắt: SHIFT+F8.
Phương pháp này tương tự như chạy từng bước (Step Into) nhưng việc thực thi một chương
trình con được coi như thực thi một dòng lệnh. Vì vậy nếu trong chương trình hiện tại có một
lời gọi chương trình con thì chương trình con sẽ được thực thi như một lệnh và do đó con trỏ
biên dịch sau đó sẽ nhảy tới dòng lệnh tiếp theo của chương trình con hiện tại.
Chạyrangoàichươngtrìnhcon(StepOut)
Nút lệnh:
. Phím tắt: CTRL+SHIFT+F8.
Nếu con trỏ biên dịch đang ở trong một chương trình con, thì lệnh biên dịch Step Out sẽ dịch
toàn bộ các lệnh còn lại trong chương trình con đó và đưa con trỏ lệnh tới vị trí tiếp sau vị trí có
lời gọi chương trình con.
Chạytớivịtrícontrỏchuột(RuntoCursor)
Nút lệnh:
. Phím tắt: CTRL+F8.
Chạy từ vị trí con trỏ biên dịch hiện tại tới vị trí có con trỏ soạn thảo. Phương pháp này thường
được dùng khi người lập trình muốn thực thi qua toàn bộ những khối lệnh lặp đến dòng lệnh
mà mình cần quan tâm.
Tạođiểmdừng(Breakpoint)khichạychươngtrình
Nút lệnh:
. Phím tắt: F9.
Với phương pháp này, khi người lập trình thực thi chương trình, trình biên dịch sẽ dừng lại tại
các vị trí dòng lệnh tương ứng đã được đánh dấu trước. Để tạo điểm dừng cho một dòng lệnh,
đưa con trỏ soạn thảo chọn dòng lệnh tương ứng và nhấn phím F9.
Điểm dừng (Break point)
Vị trí con trỏ biên
dịch hiện tại 94
trình sử dụng cú pháp:
Debug. Print <danh_sách_các_biểu_thức>
Ø
Ø
Thay đổi giá trị của một biến trong khi chạy chương trình từ cửa sổ trung gian. Chẳng
hạn như trong chương trình đang thực thi có biến a, người lập trình có thể thay đổi giá trị
của biến a thành 5 bằng cách gõ
a=5 trong cửa sổ trung gian và nhấn phím ENTER.
Cửasổtheodõi(WatchWindow).
Để hiển thị cửa sổ theo dõi, trong VBA IDE chọn trình đơn View Ö Watch Window.
Hình III-29: Cửa sổ theo dõi.
Cửa sổ này thường được sử dụng để theo dõi sự biến đổi của các biến hoặc các biểu thức trong
quá trình mã lệnh được thực thi. Ngoài ra, trong cửa sổ theo dõi, người lập trình có thể thay đổi
giá trị cho biến trong lúc đang thực thi chương trình. Cần lưu ý là giá trị của biến/biểu thức cần
theo dõi chỉ được hiển thị khi trình biên dịch đang thực thi một dòng lệnh nằm trong phạm vi
hi
ệu lực của biến/biểu thức đó. Ví dụ như biến a trong chương trình con VD1 chỉ hiển thị giá trị
C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
Ề
N
N
G
G
Ô
Ô
N
N
N
N
G
G
Ữ
Ữ
L
L
Ậ
Ậ
P
P
T
S
I
I
C
C
95
trong cửa sổ theo dõi khi trình biên dịch đang thực thi một dòng lệnh nằm trong chương trình
con
VD1 đó.
Để thêm một biểu thức vào trong danh sách các biểu thức đang được theo dõi của cửa sổ
Watch, thực hiện theo các bước sau:
1. Trong VBA IDE, chọn trình đơn Debug Ö Add Watch để hiển thị hộp thoại Add Watch.
2. Nhập biểu thức cần theo dõi trong mục Expression.
3. Chọn tên mô-đun và tên của chương trình con, nơi có chứa biến/biểu thức cần theo dõi
trong mục Module và Procedure.
4.
Nhấn ENTER hoặc chọn OK để thêm vào cửa sổ theo dõi.
GỢI Ý Để không phải thực hiện các bước và , trước khi hiển thị của sổ theo dõi,
cần đánh dấu chọn biến/biểu thức sẽ được theo dõi. Khi đó, các mục Expression, Module
và Procedure sẽ được tự động điền các giá trị tương ứng.
Hình III-30: Thêm biểu thức vào cửa sổ theo dõi.
14.3. Bẫy lỗi trong VBAIDE
Như đã đề cập ở trên, khi gặp phải những lỗi phát sinh lúc thực thi chương trình sẽ gây ra
những kết quả không thể tiên đoán được hoặc chương trình sẽ dừng lại và sẽ hiển thị thông báo
lỗi rất phức tạp. Nếu đứng về phía người sử dụng chương trình thì những hộp thoại như vậy
On Error GoTo 0 Tắt chế độ bẫy lỗi. Khi thực hiện dòng lệnh này, các lỗi đã phát sinh
trước đó sẽ được xoá và đồng thời kể từ sau dòng lệnh này, các lỗi sẽ
không được chặn lại và xử lý nữa, và như vậy chương trình có thể
ngưng hoạt động nếu có lỗi thực thi xảy ra.
Khi sử dụng câu lệnh On Error GoTo <Label>, ngay trước nhãn <Label> thường có lệnh
Exit Sub hoặc Exit Function (tuỳ thuộc chương trình con được bẫy lỗi) nhằm tránh thực
thi bộ xử lý lỗi trong trường hợp lỗi không xảy ra. Vì vậy, khuôn mẫu của các chương trình có
bộ xử lý lỗi có thể được tham khảo thao đoạn mã lệnh sau:
Sub InitializeMatrix(Var1, Var2, Var3, Var4)
On Error GoTo Bộ_xử_lý_lỗi
. . .
Exit Sub
Bộ_xử_lý_lỗi:
. . .
Resume Next
End Sub
Đoạn chương trình sau đây sẽ thực hiện truy xuất đến một tệp, sau đó đóng tệp đó lại. Nếu
trong quá trình thao tác có lỗi xảy ra, chương trình sẽ được tự động nhảy đến dòng lệnh phía
sau nhãn
lbErr để hiển thị thông báo về lỗi đã xảy ra cho người sử dụng.
Sub SolveErrorExample()
On Error GoTo lbErr
Open "C:\fileABC.txt" For Input As 1
Close 1
Exit Sub
lbErr:
MsgBox "Loi xay ra: " & Err.Description, vbCritical, "Thong bao
loi"
End Sub
Khi thực thi chương trình, trong trường hợp tệp C:\fileABC.txt không tồn tại, người dùng
B
B
Ả
Ả
N
N
V
V
Ề
Ề
N
N
G
G
Ô
Ô
N
N
N
N
G
G
Ữ
U
A
A
L
L
B
B
A
A
S
S
I
I
C
C
97Hình III-31: Thông báo lỗi do người dùng tự tạo
14.3.2. Đối tượng Err
Đối tượng
Err chứa tất cả các thông tin về lỗi thực thi của chương trình. Đối tượng này thường
được sử dụng cùng với câu lệnh
On Error Resume Next. Nhờ có đối tượng Err mà người
lập trình có thể biết rõ được các thông tin về lỗi xảy ra để có hướng xử lý thích hợp.
lệnh sau câu lệnh làm phát sinh lỗi như
MsgBox x và Exit Sub sẽ không bao giờ được thực
hiện. Đoạn mã lệnh sau nhãn
out thực hiện nhiệm vụ thông báo cho người dùng số hiệu lỗi và
mô tả về lỗi đó
Sub test()
On Error GoTo out
Dim x, y
x = 1 / y ' Dòng lệnh này làm phát sinh lỗi chia cho 0
MsgBox x
Exit Sub
out:
' Hiển thị thông báo lỗi cho người dùng
MsgBox “Ma loi: ” & Err.Number
MsgBox Err.Description