C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G
I
I
V
V
:
:
L
L
Ậ
Ậ
P
P
T
O
S
S
O
O
F
F
T
T
E
E
X
X
C
C
E
E
L
L
143
Activate Worksheet được chọn làm worksheet hiện hành
BeforeDoubleClick Người dùng kích đúp chuột trên sheet. Sự kiện này xảy ra ngay trước
khi kích đúp.
BeforeRightClick Ngay trước khi người dùng kích phải chuột trên sheet
động. Khi thực hiện theo cách như vậy, ta có thể tình cờ phát hiện ra nhi
ều điều thú vị về sự
kiện này. Một số thao tác làm phát sinh sự kiện, nhưng một số thao tác khác lại không như thế:
Ø
Ø
Thay đổi định dạng của ô không làm phát sinh sự kiện Change như mong đợi, nhưng nếu
sử dụng trình đơn Edit Ö Clear Ö Formats thì lại làm phát sinh sự kiện này.
Ø
Ø
Thêm, hiệu chỉnh hoặc xoá chú thích của các ô không làm phát sinh sự kiện Change.
Ø
Ø
Nh
ấn phím DEL trên bàn phím sẽ làm phát sinh sự kiện Change (mặc dù ô hiện tại đang
là một ô trắng). 144
Ø
Ø
Những ô bị thay đổi khi sử dụng các lệnh của Excel có thể có hoặc không làm phát sinh
sự kiện này. Ví dụ, chọn trình đơn Data Ö Form và Data Ö Sort không làm phát sinh
sự kiện. Nhưng nếu chọn trình đơn Tools Ö Spelling và Edit Ö Replace thì lại làm phát
sinh sự kiện này.
Ø
Ø
Các trường hợp khác, thủ tục sẽ tự kết thúc và không có gì xảy ra cả.
6.4. Sự kiện trong UserForm
Các sự kiện trên UserForm phát sinh khi có một hoạt động nào đó xảy ra – thường được phát
sinh từ phía người dùng (sự kiện cũng có thể được phát sinh một cách gián tiếp từ quá trình
thực hiện một phương thức nào đó). Tham khảo mục “Làm việc với UserForm và các thành
phần điều khiển” trang 61 để biết thêm chi tiết.
Dưới đây là danh sách các sự kiện trong UserForm:
Sự kiện Xảy ra khi…
Activate UserForm được chọn là hiện hành.
Click Người dùng kích chuột vào UserForm.
DblClick Người dùng kích đúp chuột vào UserForm.
Deactivate UserForm không còn là cửa sổ hiện hành.
Initialize UserForm được tạo ra.
KeyDown Người dùng nhấn một phím (nhưng chưa thả ra).
KeyPress Người dùng nhấn và thả một phím.
KeyUp Người dùng thả một phím (sau khi đã nhấn xuống).
C
C
H
H
Ư
Ư
Ơ
Ơ
N
N
G
G
R
R
Ê
Ê
N
N
M
M
I
I
C
C
R
R
O
O
S
S
O
O
F
F
T
T
E
E
Cú pháp của phương thức này như sau:
expression.OnKey Key, Procedure
Tham số Giải thích
expression Biểu thức trả về đối tượng kiểu Application
Key Chuỗi ký tự đại diện cho phím hoặc tổ hợp phím được nhấn
Procedure Tham số tuỳ chọn kiểu Variant, là chuỗi ký tự chứa tên của thủ tục sẽ được thực thi
khi người dùng nhấn phím. Nếu giá trị của tham số này là “” (chuỗi rỗng) thì sẽ
không có gì xảy ra khi người dùng nhấn phím cả. Nếu tham số Procedure được bỏ
qua, thì phím tương ứng với tham số Key sẽ được thiết lập lại giá trị mặc định của
Excel, tất cả các thủ tục đã
được gán cho phím đó sẽ không còn hiệu lực nữa.
Cần lưu ý là, tham số Key có thể là môt phím hoặc một tổ hợp phím kết hợp với các phím
ALT, CTRL hoặc SHIFT,… Mỗi phím sẽ được đại diện bằng một ký tự hoặc chuỗi ký tự,
chẳng hạn như “a” đại diện cho phím a, hay “{ENTER}” đại diện cho phím ENTER.
Để xác định các phím không hiển thị trên màn hình khi người dùng nhấn phím tương ứng
(chẳng hạn như phím TAB hoặc phím ENTER) cần phải sử dụng các giá trị đã đượ
c định nghĩa
sẵn. Dưới đây là danh sách các mã phím đặc biệt đó. Mỗi mã phím tương ứng với một phím
trên bàn phím.
Phím Mã phím
BACKSPACE {BACKSPACE} hoặc {BS}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
CLEAR {CLEAR}
DELETE hoặc DEL {DELETE} hoặc {DEL}
MŨI TÊN XUỐNG {DOWN}
END {END}
ENTER ~ (dẫu ngã)
ENTER (phím số) {ENTER}
ESC {ESCAPE} hoặc {ESC}
phím PgUp sẽ di chuyển con trỏ lên hai hàng.
Sub Setup_OnKey()
Application.OnKey "{PgDn}", "PgDn_Sub"
Application.OnKey "{PgUp}", "PgUp_Sub"
End Sub
Sub PgDn_Sub()
On Error Resume Next
ActiveCell.Offset(2, 0).Activate
End Sub
Sub PgUp_Sub()
On Error Resume Next
ActiveCell.Offset(-2, 0).Activate
End Sub
Ví dụ này có sử dụng câu lệnh On Error Resume Next để bỏ qua các lỗi có thể phát sinh. Chẳng
hạn như nếu ô hiện hành đang ở hàng đầu tiên, nếu cố gắng di chuyển lên trên sẽ làm phát sinh
lỗi. Hoặc nếu sheet hiện hành không phải là worksheet mà là chartsheet thì cũng làm phát sinh
lỗi vì không có ô hiện hành nào trên chartsheet cả.
Để xoá sự kiện OnKey cho một phím nào đấy, cần phải thực thi lại phương thức OnKey mà
không có tham số
Procedure. Thao tác này sẽ trả về chức năng mặc định cho phím đã được
gán:
Sub Cancel_OnKey()
Application.OnKey “{PgDn}”
Application.OnKey “{PgUp}”
End Sub
Mặc dù bằng cách này, người lập trình có thể gán phím tắt cho một Macro bất kỳ, tuy nhiên tốt
nhất là nên sử dụng trình quản lý Macro để gán phím tắt cho Macro (xem thêm mục “Quản lý
Macro” trang 105)
T
T
R
R
Ì
Ì
N
N
H
H
T
T
R
R
Ê
Ê
N
N
M
M
I
I
C
C
R
R
Các thao tác liên quan đến việc điều khiển chương trình Excel đều được thực hiện thông qua
đối tượng Application, đối tượng ở cấp cao nhất trong cây phân cấp đối tượng trong Excel.
7.1.1. Thoát khỏi Excel
Sử dụng phương thức có trong đối tượng Application để thoát khỏi Excel. Thông thường, nếu
có workbook nào chưa được lưu, Excel sẽ hiện thị hộp thoại để nhắc người dùng lưu
workbook. Tuy nhiên, người lập trình có thể thay đổi cách
ứng xử trên bằng một số cách sau:
Ø
Ø
Lưu tất cả các workbook trước khi thoát
Ø
Ø
Gán thuộc tính
Saved của workbook trước khi thoát
Ø
Ø
Gán thuộc tính
DisplayAlerts bằng FALSE
Ví dụ sau sẽ lưu tất cả các workbook đang mở trong Excel mà không cần hiển thị thông báo
cho người dùng:
Sub QuitSaveAll( )
Dim wb As Workbook
For Each wb In Workbooks
wb.Save
Next
Application.Quit
End Sub
Trong một số trường hợp, để tránh người dùng thoát khỏi Excel khi đang thực hiện một số
bước tính toán mất nhiều thời gian, cần phải giới hạn tương tác giữa người dùng và chương
trình Excel. Đối tượng Application có một số phương thức/thuộc tính để thực hiện điều này:
Ø
Ø
Gán thuộc tính
DisplayAlerts bằng FALSE để ẩn các hộp thoại Excel khi đang thực thi
mã lệnh.
Ø
Ø
Gán thuộc tính
Interactive bằng FALSE để người dùng hoàn toàn không thể tương tác
được với Excel.
Ø
Ø
Gán thuộc tính
ScreenUpdating bằng FALSE để tắt quá trình cập nhật lại màn hình, làm
ẩn đi những thay đổi diễn ra trong lúc thực thi mã lệnh.
Những cách trên đều cần phải thực hiện ở đầu đoạn mã lệnh và phải thực hiện lại ở cuối của
đoạn mã lệnh để thiết lập lại các giá trị mặc định, nếu không sẽ làm khoá hoàn toàn chương
trình Excel.
Ví dụ sau minh hoạ cách tạm thời khoá tương tác ngườ
i dùng khi thực hiện các đoạn mã lệnh
mất nhiều thời gian:
Sub Khoa_nguoi_dung()
Dim cel As Range
' Chuyển con trỏ chuột thành biểu tượng chờ.
Ư
Ơ
Ơ
N
N
G
G
I
I
V
V
:
:
L
L
Ậ
Ậ
P
P
T
T
R
R
Ì
O
F
F
T
T
E
E
X
X
C
C
E
E
L
L
149
Sub OpenCascadeWindows()
ActiveWindow.NewWindow
Application.Windows.Arrange xlArrangeStyleCascade, True
End Sub
Người lập trình có thể đóng, thay đổi trạng thái của cửa sổ sử dụng các phương thức và thuộc
tính có trong đối tượng Window. Ví dụ sau sẽ đóng cửa sổ đã được tạo ra ở ví dụ trước và khôi
phục lại trạng thái của cửa sổ ban đầu trong Excel:
Sub CloseMaximize()
ơn, là tạo đối tượng Application chứa ứng dụng Excel.
Để thực hiện được việc này, cần phải thực hiện các bước sau:
1. Tham chiếu đến với thư viện mở rộng của chương trình Excel.
2. Viết mã lệnh thực hiện việc khởi động chương trình Excel (tạo đối tượng Application của
Excel).
Dưới đây sẽ trình bày cách thức khởi động chương trình Excel từ VBA trong AutoCAD.
Tham
chiếuthưviệnmởrộngcủachươngtrìnhExcel
1. Khởi động chương trình AutoCAD Ö Khởi động VBAIDE trong AutoCAD bằng cách
nhấn tổ hợp phím ALT+F11. 150
2. Chọn trình đơn Tools Ö References… để hiển thị hộp thoại References dùng để tham
chiếu đến thư viện mở rộng.
3. Trong danh sách các thư viện có sẵn, chọn Microsoft Excel 11.0 Object Library Ö Chọn
OK. Như vậy là dự án VBA trong AutoCAD đã có tham chiếu đến thư viện mở rộng của
Excel, nghĩa là người lập trình có thể truy cập đến mô hình đối tượng của Excel ngay từ
bên trong VBA c
ủa AutoCAD
Hình IV-14: Hộp thoại References trong VBAIDE của AutoCAD.
CHÚ Ý Tuỳ từng phiên bản chương trình Excel đang được sử dụng mà tên của thư viện
mở rộng Excel có thể khác nhau.
ViếtmãlệnhkhởiđộngchươngtrìnhExcel
4. Trong VBAIDE của AutoCAD, chọn trình đơn Insert Ö Module để tạo mới một mô-đun
chuẩn.
5. Trong cửa sổ mã lệnh của mô-đun chuẩn, nhập đoạn mã lệnh dùng để khởi động chương
trình Excel như sau:
Sub ConnectToExcel()
V
:
:
L
L
Ậ
Ậ
P
P
T
T
R
R
Ì
Ì
N
N
H
H
T
T
R
R
Ê
C
E
E
L
L
151
‘Hiển thị cửa sổ chính của Excel
App.Visible = True
MsgBox "Now running " + App.Name + _
" version " + App.Version
‘====== Kết thúc việc khởi động chương trình Excel ======
‘Bắt đầu thực hiện các thao tác trong Excel
‘giống như khi thực hiện trong môi trường VBA của Excel
Dim WBook As Workbook, WSheet As Worksheet
Set WBook = App.Workbooks.Add
Set WSheet = WBook.Worksheets(1)
WSheet.Range("A1") = "Vi du ket noi voi Excel"
WBook.SaveAs "C:\Test.xls"
WBook.Close
Set WBook = Nothing
Set WSheet = Nothing
End Sub
6. Thực thi Macro: ConnectToExcel như trên, chương trình Excel sẽ được khởi động Ö Tạo
một Worksheet mới Ö Lưu thành tệp có tên
Test.xls nằm trong thư mục gốc của ổ đĩa
cách truyền thêm tham số vào cho phương thức thức Close:
ThisWorkbook.Close True
Đoạn mã sẽ lưu tất cả các thay đổi và sau đó đóng workbook hiện hành. Để đóng mà không lưu
những thay đổi của workbook, sử dụng đoạn mã sau:
ThisWorkbook.Close False
Để đóng tất cả các workbook, sử dụng phương thức Close có trong tập đối tượng Workbooks.
Tuy nhiên phương thức này không có tham số, vì vậy hộp thoại SaveChanges sẽ xuất hiện khi
có workbook nào đó chưa được lưu.
Sub TestCloseAll()
Workbooks.Close
End Sub
7.3. Làm việc với Worksheet
7.3.1. Tạo mới, xoá và đổi tên worksheet
Tạomớiworksheet
Để tạo mới Worksheet, sử dụng phương thức Add có trong tập đối tượng Worksheets hoặc tập
đối tượng Sheets.
Sub Tao_moi_worksheet()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
‘Thêm một worksheet vào trước worksheet hiện hành
Set ws1 = Worksheets.Add
‘Thêm một worksheet khác vào sau sheet cuối cùng của workbook
Set ws2 = Sheets.Add(After:=Sheets(Sheets.Count), Type:=xlWorksheet)
End Sub
Do tập đối tượng Sheets bao gồm nhiều loại sheet khác nhau nên khi thêm worksheet sử dụng
phương thức Add có trong tập đối tượng Sheets, cần phải xác định rõ loại sheet sẽ được thêm
vào.
Xoáworksheet
Để xoá worksheet, sử dụng phương thức Delete có trong đối tượng worksheet. Ví dụ sau sẽ xoá
worksheet có tên là Sheet1.