Nếu như có yêu cầu trước khi thực hiện một thao tác nào đó trong tập lệnh thì chúng ta phải kiểm tra một điều kiện trước, nếu điều kiện đó đúng thì thao tác đó sẽ thực hiện ngược lại thì có thể thao tác khác được thực hiện hoặc sẽ không có thao tác nào được thực hiện. Nghĩa là các thao tác trong macro trước đây mà chúng ta đã tạo sẽ không nhất thiết phải được thực hiện tất cả theo thứ tự từ trên xuống dưới mà còn phụ thuộc vào điều kiện mà chúng ta sẽ đưa vào để nuốn kiểm tra là đúng hoặc sai.
Ví dụ: Tạo macro yêu cầu người sử dụng xác nhận có đồng ý xóa mẫu tin hiện hành hay không. Nếu người sử dụng đồng ý xóa thì thực hiện xóa, ngược lại không thực hiện gì cả.
87
Macro được thiết kế như sau:
Khi thi hành macro này, hộp thoại sau sẽ xuất hiện:
Nếu người dùng chọn nút Yes, hành động RunCommand sẽ thực hiện lệnh DeleteRecord để xóa mẫu tin, ngược lại macro sẽ kết thúc mà không làm gì cả.
Để sử dụng macro trên, cần phải gắn nó vào thuộc tính sự kiện của một nút lệnh.
b) Hàm msgbox:
Cú pháp: Magbox( chuỗi 1, số 1, [, chuỗi 2]) số 2 Trong đó:
-Chuỗi 1: Biểu thức sẽ được xuất hiện trong hộp thoại.
-Số 1: Đại diện cho các biểu tượng và nút lệnh đi kèm trong hộp thoại. Số 1 có thể nhận một trong các giá trị trong bảng sau đây:
Giá trị Biểu tƣợng hoặc nút lệnh sẽ xuất hiện 16 Biểu tượng dấu cấm. (Stop)
32 Biểu tượng dấu hỏi. (Question)
48 Biểu tượng dấu cảm thán. (Exclamation) 64 Biểu tượng dấu thông tin (Information 1 Gồm hai nút OK, Cancel.
2 Gồm ba nút Abort, Retry, Ignore 3 Gồm hai nút Yes, No, Cancel.
4 Gồm hai nút Yes, No.
88
Chúng ta có thể kết hợp các số này lại với nhau để cùng lúc trên hộp thoại xuất hiện các nút và các biểu tượng bằng cách cộng hai số lại với nhau.
Thí dụ: muốn có hai nút Yes, No và biểu tượng dấu hỏi thì chúng ta ghi 32+ 4 hoặc 36
-Chuỗi 2: là biểu thức chuỗi chỉ tiêu đề của hộp thoại, nếu không ghi thì tiêu đề của hộp thoại là chữ Microsoft Access.
-Số 2: là giá trị trả về mà người sử dụng đã chọn, có thể là một trong các giá trị sau đây:
Giá trị số 1 2 3 4 5 6 7
Nút đã chọn OK Cancel Abort Retry Ignore Yes No c) Thao tác chèn thêm cộtđiều kiện trong macro.
-Mở tập lệnh ở chế độ thiết kế.
-Vào menu View\Condition.
-Ghi điều kiện cần kiểm tra cho các thao tác trong macro trên cột điều kiện mới thêm vào.
Lưu ý: Đôi khi với một điều kiện đúng chúng ta cần thực hiện nhiều thao tác đồng thời. Khi đó chúng ta chỉ cần dùng 3 dấu chấm (...) từ dòng thứ 2 trở về sau.
Ví dụ: Khi cập nhật dữ liệucho bảng MONHOC bằng một biểu mẫu (Form), nếu một tên môn học để trống thì chúng ta sẽ thực hiện 2 thao tác: Thông báo lỗi và định con nháy về vị trí điều khiển tên môn học để nhập lại.
* Tạo macro nhóm (Macro Group) -Mở một macro ở chế độ Design.
-Vào menu View\Macro Name.Khi đó trong cửa sổ thiết kế sẽ xuất hiện thêm một Macro Name.
-Đặt tên cho macro trong cột Macro name.Sau đó thêm các thao tác vào macro.
-Lặp lại bước 3 cho để tạo các macro khác trong cùng nhóm.
89
-Lưu macro.Tên macro là tên của macro nhóm.
Lưu ý: Đểgắn một macro trong macro nhóm, bạn sử dụng cú pháp:
Tên_macro_nhóm.Tên_macro.
Ví dụ:Macro Thao Tac Cap Nhat được minh họa trong màn hình sau là một macro nhóm có 9 macro con.
- Macro AutoKeys
Macro AutoKeys là một macro cho phép ta dùng bàn phím để thi hành một hành động nào đó. Ví dụ: khi nhấn phím Ctrl+Pthì in ra máy in một Report.
Cách tạo:
-Mở macro ở chế độ Design.
-Hiển thị cột Macro name nếu nó chưa xuất hiện.
-Nhập các mã phím muốn sử dụng vào cột Macro Name và chọn một hành động tương ứng trong cột Action. Mã phím là một ký hiệu đại diện cho một phím trênbàn phím được liệt kê trong bảng dưới đây.
Lưu macro lại với tên là AutoKeys.
Bảng mã phím (Key Code) và phím tương ứng trên bàn phím:
Mã phím Phím tương ứng
{BACKSPACE}, {BS}, hoặc
{BKSP} BACKSPACE
{BREAK}, {PRTSC} BREAK, PRINT SCREEN
{CAPSLOCK}, NUMLOCK}, {SCROLLLOCK}
CAPS LOCK , NUM LOCK, SCROLL LOCK
90
{DELETE} or {DEL} DEL or DELETE
{LEFT}, {RIGHT}, {UP},
{DOWN} , , ,
{END}, {HOME} END, HOME
{ENTER} hoặc ~ ENTER
{ESC} ESC
{HELP} HELP
{INSERT} hoặc {INS} INS or INSERT
{PGDN}, {PGUP} PAGE DOWN, PAGE UP
{TAB} TAB
{F1}, {F2},... {F12} F1, F2,..., F12
+, ^, % SHIFT, CTRL, ALT
Ví dụ: Tạo một macro AutoKeys để thực hiện những công việc sau:
Ctrl - P: Mở form F_Danh mụcvật tư.
Shift - F12: Mở table T_Khách hàng.
Alt - R: Mở report R_Chi tiết nhập Xuất
Ctrl - Shift - F11: Mở query Q_Chi tiết nhập xuất
+ Macro Autoexec
Macro Autoexec là loại macro được tự động thi hành ngay khi mở tập tin CSDL.
Lưu ý:
-Phải đặt tên Macro đúngchữ Autoexec.
91
-Muốn không cho thực hiện Macro Autoexec ngay khi mở Database ta phải nhấn phím SHIFT khi thực hiện thao tác mở.
Ví dụ: Khi bạn mở tập tin Microsoft Access “Quan Ly ban hang” thì tự động mở Form có tên Main Switch. Để làm được việc này, ta tạo một macro có tên Autoexec và có nội dung như sau:
3. Tạo các nút lệnh trên form, thựcthu macro trên nút lệnh
* KẾT MACRO VÀO CHƯƠNG TR NH:
Như các phần trên giới thiệu, chúng ta có thể cho thực hiện một macro bằng cách chọn và click nút Run, tuy nhiên trên thực tế thì chúng ta không thể yêu cầu người sử dụng phải nhớ hết tên của từng Macro và gọi nó thực hiện khi muốn, mà thông thường các tập lệnh này sẽ được kết vào các biến cố của các điều khiển, các biểu mẫu, các báo biểu hoặc đưa vào các chức năng bên trong thanh thực đơn, thanh công cụ. Khi các biến cố xảy ra tức thì các thao tác trong macro đã được kết vào các biến cố này sẽ được thực hiện.
-Khái niệm về biến cố
Là những sự kiện được tự động phát sinh khi có các thao tác như: nhấn phím, nhấn chuột, di chuyển chuột,..được xảy ra trên biểu mẫu hoặc báo biểu trong quá trình từ khi mở biểu mẫu hoặc báo biểu ra để thực hiện các thao tác cập nhật dữ liệu cho đến khi đóng lại. Thứ tự trước sau của các biến cố này sẽ do Microsoft Access qui định. Do đó chúng ta cần phải xác định đúng biến cố nào sẽ có thể kết tập lệnh vào đó để thực hiện đúng các thao tác mong muốn.
Ví dụ: Khi mở biểu mẫu, chúng ta sẽ cómột thứ tự các biến cố như sau: Open
Load Active.
- Kết hợp một macro vào một biến cố
Mở biểu mẫu hoặc báo cáo ở chế độ thiết kế.
Chọn biến cố thích hợp của biểu mẫu, báo cáo hoặc một điều khiển trên cửa sổ thuộc tính. Sau đó chọn một macro mong muốn trong danh sách các macro.
92
- Sử dụng c ng cụ xây dựng macro (Macro Builder).
Là công cụ cho phép chúng ta cùng một lúc tạo ra các thao tác trong một macro mới và sau đó kết macro này vào trong một biến cố được chỉ định trước.Chúng ta chỉ sử dụng công cụ này khi chúng ta chưa xây dựng macro. Các bước thực hiện như sau:
-Nhấn vào dấu ba chấm (...) tại biến cố cần tạo macro.
-Trong hộp hội thoại chọn bộthiết kế (Choose Builder), chọn Macro Builder và Click OK để thiết kế một macro mới.
Tiếp theo gõ tên macro sẽ tạo, chọn OK.
Sau đó chọn các thao tác cần thiết và ghi vào tham số trên màn hình thiết kế macro, lưu lại macro và thoát trở về biến cố trước đó mà ta đã chọn trong biến cửa sổ thuộc tính. Lúc bấy giờ chúng ta sẽ thấy tên của macro vừa mới tạo được kết vào biến cố.
93
- Bảng liệt kê các biến cố (Event) quan trọng trong Property Sheet Windows Events: Xảy ra khi mở, đóng hoặc đóng một Form.
Event Event Rroperty Diễn giải
Open OnOpen (Forms) Xảy ra khi Form được mở, nhưng trước khi mẫu tin đầu tiên được hiển thị
Load OnLoad (Forms) Xảy ra khi một Form được mở và các mẫu tin của nó được hiển thị. Event này xảy ra trước Current event nhưng sau Open event
UnLoad OnUnLoad(Forms) Xảy ra khi một Form bị đóng nhưng trước khi Form bị xóa khỏi màn hình. Event này xảy ra trước Close event
Close OnCLose (Forms) Xảy ra khi Form này bị đóng và nó được xóa khỏi màn hình.
94
Data Events:
Xảy ra khi nhập, xóa hay điều chỉnh dữ liệu trong một Form, một control hoặc khi đặt điểm chèntừ một mẫu tin đến một mẫu tin khác.
Event Event Property Diễn giải
Current OnCurrent (Forms)
Xảy ra khi điểm chèn di chuyển tới một mẫu tin và làm cho nó trở thành là mẫu tin hiện hành, hay khi ta muốn vấn tin lại nguồn dữ liệu cho Form.
Event này xảy ra khi Form được mở đầu tiên và bất cứ khi nào mà ta di chuyển sang một mẫu tin khác.
BeforeInsert BeforeInsert Forms)
Xảy ra khi ta gõ vào ký tự đầu tiên cho một mẫu tin mới, hay khi gán giá trị của Control trong mẫu tin mới nhưng trước khi mẫu tin đó được đưa vào trong CSDL.
AfterInsert AfterInsert (Forms) Xảy ra sau khi mẫu tin mới được đưavào CSDL.
Delete OnDelete (Forms)
Xảy ra khi một mẫu tin mới bị xóa, nhưng trước khi việc xóa được chấp nhận và thực hiện.
BeforeDelete Confirm
BeforeDeleteConfirm (Forms, Controls)
Xảy ra sau khi một hay nhiều mẫu tin bị chọn để xóa nhưng lại xảy ra trước khi Microsoft Access hiển thị hộp hội thoại để đưa vào ta xác nhận hoặc hủy bỏ việc xóa. Event này xảy ra sau Delete event.
AfterDeleteC onfirm
AfterDeleteConfirm (Forms, Controls)
Xảy ra sau khi ta xác nhận muốn xóa mẫu tin, hay xảy ra sau khi ra chọn Cancel để hủy bỏ việc xóa mẫu tin
BeforeUpdate BeforeUpdate (Forms, Controls)
Xảy ra trước khi một control hoặc một mẫu tin được cập nhật với dữ liệu mới. Even này xảy ra khi điểm chèn di chuyển đến một Control hay mẫu tin mới.
AfterUpdate AfterUpdate (Forms, Xảy ra sau khi một Control hoặc mẫu tin được cập nhật với dữ liệu mới.
95
Controls) Event này xảy ra khi điểm chèn di chuyển tới một Control hay mẫu tin khác.
Change OnChange (Forms, Controls)
Xảy ra khi có bất kỳ ký tự nào được nhập vào Text Box hoặc Combo Box
Mouse Event: Xảy ra khi ta sử dụng Mouse để chọn đối tƣợng Event Event Property Diễn Giải
Click OnClick (Forms, Controls)
Đối với một Control , Event này xảy ra khi ta Click Mouse Pointer trên Control đó, hay khi giá trị của control bị thay đổi.
Một Click event cũng xảy ra khi ta thiết lập thuộc tính Value của một Option Button là True hoặc khi ta thay đổi giá trị của một Check Box. Đối với một Form, Event này xảy ra khi ta Click Mouse Pointer vào khu vực ở phía ngoài các Section và Controls, hoặc khi ta Click vào một Disable Control.
DbClick
OnDbClick (Forms,Controls)
Xảy ra khi ta Click 2 lần liên tiếp trên một Control hay nhãn của nó. Đối với Forms, event này xảy ra khi ta double click trên vùng trống của Form hay trên một Disable control trên Form.
96
Bài Tập
Tạo biểu mẫu dạng Tabular : Sử dụng CSDL Baitap4.accdb Tạo Form cho Table TRINHDO, lưu với tên F_TRINHDO như sau:
2. Tạo Form cho Table CHAMCONG, lưu với tên F_CHAMCONG như sau:
3. Tạo Form cho Table LUONG, lưu với tên F_LUONG như sau:
C. Hiệu chỉnh và thay đổi thuộc tính của Form:
1. Mở các Form F_DMTO và Form F_DMNV điều chỉnh như sau:
Không hiển thị nút Maximize, Minimize, Control Box.
Không hiển thị thanh chọn mẫu tin.
Tự động canh giữa màn hình khi hiển thị.
Riêng Table F_DMTO thì không hiển thị các nút di chuyển mẫu tin.
Không cho hiển thị các đường phân cách.
2. Thêm tiêu đề "DANH MỤC TRÌNH ĐỘ" ở vùng Form Header của F_TRINHDO.
3. Form F_CHAMCONG chỉ cho phép thêm mới, không cho phép xoá và sửa những mẫu tin củ. Riêng cột tiền công thì cấm nhập dữ liệu vào.
97
4. F_LUONG chỉ cho phép xem, không cho phép xóa.
D. Cải tiến Form bằng các c ng cụ thiết kế Form...:
1. Mở Form F_DMNV sử dụng công cụ Option Group và ComboBox như sau:
2. Sử dụng công cụ SubForm/SubReport và Command Button, tạo Form như hình lưu tên THEODOICHAMCONG:
Yêu cầu:
Tạo Form dạng Main/SubForm.Khi di chuyển đến nhân viên nào thì bảng chấm công sẽ hiển thị những công việc của nhân viên đó.
Main Form không cho phép sửa, chỉ cho thêm mới. Không hiển thị 2 thanh trượt.không hiển thị thanh chọn mẫu tin (Record Selection), không cho hiển thị bộ nút di chuyển Access và không cho hiển thị đường phân cách.
Sử dụng Command Button kết hợp với ControlWizards thực hiện các nút sau:
Tạo các nút dùng để di chuyển qua lại các mẫu tin.
Nút XOÁ sẽ xoá nhân viên hiện hành.
Nút Xem CT sẽ mở Form F_DMNV (đã tạo ở câu trước) hiển thị một mẫu tin tương ứng với nhân viên hiện tại.
Nút THOÁT đóng Form.
3. Hãy tạo các nút Đầu, Trước, Kế, Cuối, Thêm Mới , Xóa và Thoát cho các Form đã tạo ở phần A, B, C.
98
4. Hãy thiết kế và trình bày Form dùng nhập liệu DMNV theo mẫu sau :
- Sử dụng Command Button kết hợp với ControlWizards thực hiện các nút sau : - Tạo các nút di chuyển: di chuyển qua lại giữa các mẫu tin.
- Nút Thêm thêm một nhân viên mới.
- Nút Huỷ xoá nhân viên hiện hành.
- Nút Ghi lưu thông tin nhân viên mới nhập vào.
- Nút Không Ghi không lưu thông tin nhân viên mới nhập vào.
- Nút Tìm tìm nhân viên đang hiển thị trên form hiện hành.
- Nút Thoát đóng Form hiện hành.
A.Hãy sao chép Form THEODOICHAMCONG thành CHAMCONG_MACRO, sau đó mở Form này và xóa tất cả các nút di chuyển, Xóa, XemCT, Thoát rồi lưu lại:
1. Sử dụng công cụ Command Button tạo các nút di chuyển, Thoát, Xóa và XemCT cho Form như hình. (Không bật Control Wizards)
2. Tạo nhómcác Macro dùng để di chuyển và thêm mới mẫu tin đặt tên lần lượt là DAU, TRUOC, SAU, CUOI, THEMMOI.
- Tạo Marco cho nút XEMCT công dụng mở Form Form F_DMNV hiển thị nhân viên hiện tại đang trong Form CHAMCONG_Marco.
99
Tạo Macro cho nút THOAT công dụng đóng.
Kết các Macro này vào biến cố của các nút tương ứng trong Form CHAM CONG_Marco.
3. Thêm cột dongiacv vào Sub Form.
Sau đó, sử dụng Macro và thuộc tính sự kiện AfterUpdate của Text Box socong để cài đặt Access tự động tính tiencong sau khi cập nhật socong.
B. Sử dụng công cụ OptionGroup kết hợp Macro có điều kiện ... tạo Form sau, lưu tên DSABC.
Yêu cầu:Khi nhấn vào nút ABC, DĐE ... sẽ hiển thị những nhân viên có ký tự đầu của tên tương ứng với nút đang chọn. Nút tất cả dùng để hiển thị tất cả mẫu tin.
Hướng Dẫn:
- Đặt tên cho Option Group là DKLOC.
- Vào thuộc tính AfterUpdate của Option Group tạo Macro loại có điều kiện đặt tên LOCABC gồm các hành động (Action) sau: (Để hiển thị cột Conditions chọn View - Conditions)
Condition Action Tham số Where Condition
[DKLOC]=1 ApplyFilter [tennv] like "[A,B,C]*"
[DKLOC]=2 ApplyFilter [tennv] like "[D,Đ,E]*"
... ... ...
[DKLOC]=9 ShowAllRecords
C. Kết hợp Option Group, ComboBox và Macro nhóm để tạo Form DSTHEOTO như sau:
100
Yêu cầu:
Khi mở Form, Option Group sẽ hiển thị ở chế độ tất cả --> Form hiển thị tất cả các nhân viên, Combo Box mờ đi (sử dụng thuộc tính Enabled=No/False).
Khi người sử dụng chọn Hiển thị theo tổ --> Combo Box sáng cho phép sử dụng (Enable=Yes/True), người sử dụng chọn tổ trong ComboBox thì Form chỉ hiển thịnhững nhân viên thuộc tổ được chọn.
Khi người sử dụng chọn lại Hiển thị tất cả --> ComboBox mờ đi --> Form hiển thị lại tất cả các NV.
Hướng dẫn:
Tạo Option Group bao gồm các nhãn Hiển thị tất cả ;Hiển thị theo tổ. Giá trị của các nhãn (Option Value) lần lượt là 1,2. Chọn kiểu các nút là Option Button. Mục chọnmặc định (Default) là Hiển thị tất cả
Đặt tên cho Option Group là DKLOC.
Tạo Combo Box hiển thị 2 cột MATO, TENTO lấy từ Table DMTO. Giá trị của Combo được lấy theo cột MATO và không ràng buộc bởi Field MATO trong dữ liệu nguồn của Form (chọn Remember the value for later use). Đặt tên cho Combo Box này là TO
Tạo Macro nhóm có điều kiện tên LOCTO gồmcác hành động (Action) sau:
(Để hiển thị cột Conditions: View - Conditions, cột Macro Name:View - Macro Name) .
Macro
Name Condition Action Các tham số
Chonlua [DKLOC]=1 ShowAllRecords
SetValue Item: TO.Enabled Expression: False [DKLOC]=2 SetValue Item: TO.Enabled
Expression: True
LocTo ApplyFilter Where Condition:
[mato]=[Forms]![dstheoto]![to]
(Click vào nút ... để làm công thức này)
- Kết Macro này vào các biến cố như sau: biến cố AfterUpdate của Option Group DKLOC chọn Macro LOCTO.Chonlua; biến cố AfterUpdate của ComboBox TO chọn Macro LOCTO.LocTo.