a) Ý NGHĨA
Khi ta không muốn lặp đi lặp lại nhiều lần tên biến đối tượng hoặc tên đối tượng trong các câu lệnh thì ta có thể dùng phát biểu With.
b) CÚ PHÁP
With <Đối tượng>
.<Thuộc tính>
.<Phương thức>
End With
c) THÍ DỤ : Đoạn lệnh sau đây
Me.Caption = "Quan ly khach hang" Me.AllowAdditions = False
Me.AllowDeletions = False Me.AllowEdits = True Có thể viết lại theo cấu trúc With là:
With Me
.Caption = "Quan ly khach hang" .AllowAdditions = False
.AllowDeletions = False .AllowEdits = True End With
4.3. MỘT SỐ THUỘC TÍNH, PHƯƠNG THỨC, BIẾN CỐ CỦA MỘT SỐ ĐỐI TƯỢNG THƯỜNG DÙNG
- Visible: Ẩn hoặc hiện form khi mở form ra. Có 2 giá trị là True (hiện) hoặc False (ẩn).
Thí dụ: Muốn ẩn Form hiện hành
Me.Visible = False ‘Ẩn Form hiện hành
- AllowDeletions: Cho (True) hoặc không cho (False) xóa dữ liệu trên Form Thí dụ:
Me.AllowDeletions = False ‘Không cho phép xóa dữ liệu trên Form - AllowAdditions: Cho (True) hoặc không cho (False) thêm dữ liệu trên Form
Thí dụ:
Me.Additions = True ‘Cho phép thêm dữ liệu trên Form - AllowEdits: Cho (True) hoặc không cho (False) sửa dữ liệu trên Form
Thí dụ:
Me.AllowEdits = False ‘Không cho phép sửa dữ liệu trên Form - NavigationButtons: hiện (True) hoặc ẩn (False) thanh chứa các nút di chuyển
mẫu tin của Form
Thí dụ:
Me.NavigationButtons = False ‘Ẩn thanh chứa các nút di chuyển mẫu tin. - BookMark: Di chuyển mẫu tin hiện hành của form đến vị trí có BookMark nào
đó. (BookMark là số hiệu đánh dấu của từng mẫu tin trên bộ mẫu tin)
Thí dụ:
Me.BookMark = Rs.BookMark ‘Di chuyển mẫu tin hiện hành của Form đến mẫu tin mà con trỏ mẫu tin Recordset đang trỏ tới (Rs là biến có kiểu Recordset)
- CurrentRecord: Trả về một số có kiểu Long cho biết mẫu tin hiện hành của
Form được chỉ định nào đó (Form này đang hiển thị ở chế độ Form View) là mẫu tin thứ mấy. Thuộc tính này read only nên chỉ cho phép người lập trình tham khảo chứ không cho phép thay đổi.
- AllowFilters: Cho phép (True) hoặc không cho phép (False) lọc các mẫu tin
trên Form. Mặc nhiên là cho phép lọc.
Thí dụ:
Me.AllowFilters = False ‘Không cho phép lọc các mẫu tin trên Form - Filter: cho phép xác định điều kiện lọc cho Form hoặc Report. Điều kiện lọc là
một biểu thức đặt trong dấu nháy đôi.
- FilterOn: tiến hành lọc (True) theo điều kiện được khai báo trong thuộc tính Filter hoặc Bỏ lọc (False).
Ví dụ: Trong form F_HosoNV trên đó có 2 nút lệnh cmdLoc và cmdBoloc. Nếu
bấm vào nút Lọc thì xuất hiện hộp thoại yêu cầu nhập vào tên nhân viên cần lọc. Sau khi nhập tên nhân viên và bấm OK thì tiến hành lọc những mẫu tin của form F_HosoNV chỉ cho hiển thị những nhân viên có tên được nhập từ bàn phím mà thôi. Nếu bấm vào nút Bỏ Lọc thì hiện đầy đủ các mẫu tin như ban đầu.
Hình 4.6: Form F_CHITIETHOADON khi chưa lọc
dk = InputBox("Nhap vao ten nhan vien can loc:") Me.Filter = "ten='" & dk & "'"
Me.AllowFilters = True Me.FilterOn = True End Sub
b) PHƯƠNG THỨC
- Undo: dùng quay về trạng thái ban đầu cho Form khi nó đang được sửa đổi. Thí dụ:
Me.Undo ‘Dùng phục hồi trạng thái cũ của Form hiện hành khi nó đang hiệu chỉnh.
- Requery: ta sử dụng phương thức này để cập nhật lại dữ liệu mới nhất mà Form
có được. Phương thức này thực hiện một trong các việc sau:
+ Trả về query nguồn cho Form.
+ Hiển thị dữ liệu mới nhất của Table nguồn khi ta Thêm, Xóa hoặc Sửa mẫu
tin trên đó.
+ Cập nhật lại sự thay đổi mẫu tin khi ta ta áp dụng phương thức Lọc dữ liệu
trên Form.
Thí dụ:
Me.Requery ‘Dùng làm tươi dữ liệu lại cho Form
- Recalc: cập nhật tức thời toàn bộ các điều khiển tính toán trên Form Thí dụ:
Me.Recalc
c) BIẾN CỐ
- On Open (Cancel As Integer): biến cố xảy ra khi cửa sổ form được mở ra.
Tham số Cancel có giá trị là True hoặc False. Mặc nhiên là False. Nếu là True có tác dụng hủy bỏ biến cố.
- On Load: biến cố xảy ra khi dữ liệu được nạp lên form.
- On Unload (Cancel As Integer): biến cố xảy ra khi nguồn dữ liệu trên form bị
đóng lại. Tham số Cancel có giá trị là True hoặc False. Mặc nhiên là False. Nếu là True có tác dụng hủy bỏ biến cố.
- On Close: biến cố xảy ra khi cửa sổ form bị đóng lại. Thứ tự các biến cố xảy ra:
Các biến cố lần luợt xảy ra khi mở form:
Các biến cố lần luợt xảy ra khi đóng form:
4.3.2. TEXTBOX a) THUỘC TÍNH
- Name: dùng đặt tên cho TextBox. Ta chỉ đặt tên cho TextBox khi Form ở chế độ Design View. Trong quá trình đối tượng đang mở ta không được phép sử dụng lệnh để đổi tên đối tượng.
- Control Source: khai báo nguồn dữ liệu cho TextBox. Nếu thay đổi bằng lệnh
thì giá trị thay đổi phải đặt trong cặp dấu nháy đôi.
Thí dụ: Trên Form một form ta co textbox mang tên txtthang. Để gán cho txtbox này hiển thị tháng hiện hành ta sử dụng lệnh
Me.txtthang.RecordSource=”=Month(Date())”
- Visible: Hiện (True) hoặc ẩn (False) TextBox. Mặc nhiên là True. Thí dụ:
Me.txtKETQUA.Visible = False ‘Làm ẩn TextBox txtKETQUA - Enabled: làm mờ (False) hoặc sáng lại bình thường (True) Mặc nhiên là True.
Ví dụ:
Me.txtTongTriGia.Enabled = False ‘Làm mờ TextBox txtTongTriGia
- Locked: Cho phép (False) hoặc không cho phép (True) sửa đổi dữ liệu trên TextBox. Mặc nhiên là False.
Thí dụ:
Me.txtTongTriGia.Locked = False ‘Không cho phép sửa đổi dữ liệu trên
TextBox txtTongTriGia
- AutoTab: tự động (True) hay không tự động (False) di chuyển con trỏ sang
Open Load Resize Active Current
Hình 4.13: Khi đưa con trỏ chuột vào TextBox Manv thì xuất hiện lời mách nước
b) PHƯƠNG THỨC
- SetFocus: Cho TextBox nhận sự tập trung. Hay nói cách khác làm cho con trỏ
chèn nhảy vào TextBox.
Thí dụ: Khi ta bấm vào nút THÊM để thêm mẫu tin mới cho Form
F_CAPNHATSANPHAM, ta muốn con trỏ nhảy ngay tới TextBox txtMASP nào đó để ta nhập ngay thông tin cho cột MASP, ta dùng phương thức SetFocus.
Private Sub THEM_Click()
Me.txtMASP.SetFocus ‘Cho con trỏ chèn nhảy ngay tới TextBox txtMASP
End Sub
c) BIẾN CỐ
- GotFocus: xảy ra khi TextBox nhận được sự tập trung (con trỏ chèn nhảy vào
TextBox).
- On Change: xảy ra khi có sự thay đổi dữ liệu trên TextBox
- BeforeUpdate: xảy ra trước khi dữ liệu được cập nhật xuống Control Source của TextBox.
- AfterUpdate: xảy ra sau khi dữ liệu đã được cập nhật xuống Control Source của
- LostFocus: xảy ra khi TextBox mất sự tập trung, con trỏ chèn đi ra khỏi
TextBox.
4.3.3. COMMAND BUTTON a) THUỘC TÍNH
- Name: đặt thuộc tính Name cho Command Button
- Caption: Đặt thuộc tính nhãn cho CommandButton
Thí dụ: Đoạn lệnh sau đây có chức năng kiểm tra thuộc tính Caption của nút
nút lệnh có tên là CmdVd nếu nhãn của nó đang là “Yes” thì đổi lại trở thành “No” và ngược lại nếu đang là “No” thì đổi lại trở thành “Yes”.
If Me.CmdVd.Caption=”Yes” Then Me.CmdVd.Caption=”No” Else
Me.CmdVd.Caption=”Yes” End If
- Picture: Khai báo đường dẫn đến file hình để làm nhãn cho nút lệnh thay dòng
chữ.
Thí dụ: Đặt hình lên nút. Hình là file maybay.ico nằm ở thư mục Hinh của ổ
đĩa C:
Me.cmdLoc.Picture=”C:\Hinh\maybay.ico”
- ControlTipText: tương tự TextBox
Thí dụ: Cho lời mách của nút cmdThem là “Thêm mẫu tin mới” khi mở Form
F_HOADON
Hình 4.17: Lời mách nước của nút lệnh cmdThem xuất hiện khi ta đưa con trỏ chuột vào nó
- Visible: tương tự như TextBox Thí dụ: Ẩn nút cmdThoat
Me.cmdThoat.Visible = False
- Enabled: tương tự như TextBox
Thí dụ: làm mờ nút cmdCong, cmdTru, cmdNhan, cmdChia
Me.cmdCong.Enabled = False Me.cmdTru.Enabled = False Me.cmdNhan.Enabled = False Me.cmdChia.Enabled = False
b) PHƯƠNG THỨC
- SetFocus: làm cho nút lệnh nhận sự tập trung
Thí dụ: Khi ta bấm vào nút cmdLuu để lưu mẫu tin thì ta muốn nút cmdThem
nhận được sự tập trung để ta có thể bấm Enter là có thể nhập mẫu tin mới khác.
Me.cmdThem.SetFocus
c) BIẾN CỐ
On Click: xảy ra khi ta Click chuột vào nút
Phần 1: Thiết kế Report
BÀI TẬP REPORT 1
1. Sử dụng table T_HOADON, T_CTHOADON, T_SANPHAM trong file Banhang.accdb để Report R_THEODOINHAPVATU có dạng sau:
Yêu cầu:
Tạo một Query trung gian và tạo biến “Nhap vao thang muon theo doi:” để lọc dữ liệu theo tháng có giá trị nhập từ bàn phím. Sau đó sử dụng query này để tạo Report
Cuối Report có tính tổng Trị giá nhập xuất Cuối mỗi trang có đáng số thứ tự trang Định dạng đường kẽ của Report như mẫu.
BÀI TẬP REPORT 2
2. Sử dụng table T_Hosonv, Chamcong06 để Report R_CHAMCONG có dạng như sau:
Mỗi lần mở Report thì thông báo “Nhập vào tháng cần in” Nhập vào tháng nào thì chỉ in bảng chấm công của tháng đó mà thôi.
BÀI TẬP REPORT 4
Từ Table T_Hosonv hãy tạo Report R_TheNV có nội dung sau:
Khi mở Report thì yêu cầu nhập vào mã nhân viên cần in. Nếu không nhập mã thì in ra report chứa tất cả các nhân viên .Report được thiết kế trên khổ giấy A4, mỗi trang in gồm 10 thẻ có nội dung như hình mẫu trên.
BÀI TẬP REPORT 5
Từ 2 form F_hoadon và F_Cthoadon, sử dụng chức năng Save as form ở dạng Report để tạo Main Report /Sub report có tên là R_Hoadon có nội dung sau:
Phần 2. Thiết lập Macro
1. Thiết kế Form F_TheoDoiHD có nội dung như sau:
Hướng dẫn:
• Khi nhắp chuột vào một nút Toggle Button trong nhóm thì trên form chỉ lọc ra hoá đơn có ký tựđầu tiên của mã sản phẩm được nhắp tương ứng.
• Đặt tên Cho Option Group là: TimMSP, Gán thuộc tính Default Value của Option Group có giá trị 27
• Tạo Macro có điều kiện tên M_LocMSP có nội dung sau để gán cho nhóm:
Condition Action Action Arguments
[TimMSP]=1 Apply Filter Where Condition [Masp] Like “A*” [TimMSP]=2 Apply Filter Where Condition [Masp] Like “B*” ….
[TimMSP]=27 Show AllRecords
2. Thiết kế Form F_TienichHD có nội dung sau:
Yêu cầu:
Khi nhắp chọn theo:
• “Số hóa đơn”: Thì mở Form F_Hoadon • “Sản phẩm”: Thì ở Form F_TdoihdontheoSP • “Khách hàng”: Thì ở Form F_TdoihdontheoKH
Khi nhắp chuột vào nút “Xem dữ liệu” thì mở Form tương ứng ở chếđộ Form view Khi nhắp chuột vào nút “Sửa mẩu Form” thì mở Form tương ứng ở chếđộ Design View Khi nhắp chuột vào nút “Đóng Form” thì thông báo “Bạn có muốn đóng Form không?” Chọn Yes thì đóng, No thì không đóng.
Hướng dẫn:
năng mở Report R_Hoadon ở chếđộ Print Preview nhưng chỉ chứa hoá đơn hiện hành trên Form.
Hướng dẫn:
Thiết kế một Macro mang tên M_InHoadon có nội dung sau:
Gán macro M_InHoadon vào biến cốOn Click của nút lệnh “In Hoa đơn” 4. Mở Form F_TienichNV ở chếđộ Design thiết kế thêm các nút lệnh sau:
Nút lệnh “Tạo File DSNV.XLS” có chức năng tạo ra file Excel có tên DSNV.XLS có chứa dữ liệu giống như Table T_Hosonv
Nút lệnh “Tạo File DSNV.Doc” có chức năng tạo ra file Word File DSNV.Doc có chứa dữ liệu giống như Table T_Hosonv
Hướng dẫn:
Tạo Macro M_TaofileExcelDSNV rồi gán vào biến cố Onclick của nút lệnh “Tạo File DSNV.XLS”
Tạo Macro M_TaofileWordDSNV rồi gán vào biến cố Onclick của nút lệnh “Tạo File DSNV.DOC”
5. Tạo Form F_TienichTable có nội dung sau:
Hướng dẫn:
Tạo macro M_MoTable có nội dung như sau
Gán từng Macro con vào biến cố On Click của từng nút lệnh tương ứng Khi thiết kế Option Group gán thuộc tính của các nút có nội dung sau _Name: chontable
6. Tạo Form F_QLTienich có nội dung sau:
Hướng dẫn:
Tạo macro M_QLTienich có nội dung như sau
Phần 2. Lập Trình VBA.
1. Thực hiện tạo Form F_tienichTinhtoan có chức năng thực hiện các phép tính số học như sau:
Me.kq.Visible = False End Sub
_Khi nhập đủ 2 số trong 2 textbox so1, so2 thì các nút lệnh mới sáng lên. Private Sub so1_AfterUpdate()
If Not IsNull(so1) And Not IsNull(so2) Then Me.Cong.Enabled = True: Me.Tru.Enabled = True Me.Nhan.Enabled = True: Me.Chia.Enabled = True Me.Xoa.Enabled = True
Else
Me.Cong.Enabled = False: Me.Tru.Enabled = False Me.Nhan.Enabled = False: Me.Chia.Enabled = False Me.Xoa.Enabled = False
End If End Sub
Private Sub so2_AfterUpdate()
If Not IsNull(so1) And Not IsNull(so2) Then Me.Cong.Enabled = True: Me.Tru.Enabled = True Me.Nhan.Enabled = True: Me.Chia.Enabled = True Me.Xoa.Enabled = True
Else
Me.Cong.Enabled = False: Me.Tru.Enabled = False Me.Nhan.Enabled = False: Me.Chia.Enabled = False Me.Xoa.Enabled = False
End If End Sub
_Khi nhắp vào một Nút tính mới thực hiện việc tính toán và làm xuất hiện TextBox kết quảđể chứa giá trị.
Private Sub Cong_Click()
kq = Val(so1) + Val(so2) :Me.kq.Visible = True End Sub
Private Sub Tru_Click()
kq = Val(so1) - Val(so2) :Me.kq.Visible = True End Sub
Private Sub Nhan_Click()
kq = Val(so1) * Val(so2) : Me.kq.Visible = True End Sub
Private Sub Chia_Click() If so2 <> 0 Then
kq = Val(so1) / Val(so2) : Me.kq.Visible = True Else
MsgBox "Khong the thuc hien phep toan chia vi so chia bang 0" so2.SetFocus
End If End Sub
Private Sub Xoa_Click()
so1 = null : so2 = null : kq = null : so1.SetFocus Me.Cong.Enabled = False : Me.Tru.Enabled = False Me.Nhan.Enabled = False :Me.Chia.Enabled = False Me.Xoa.Enabled = False : Me.kq.Visible = False End Sub
_Không cho Con trỏ loạt vào Text Box trị giá Private Sub kq_GotFocus()
Me.so1.SetFocus End Sub
2. Mở lại Form F_hoadon thực hiện các chức năng sau:
Bỏ thanh Navigation Button
Thiết kế thêm các nút lệnh có mẩu như trên chú ý tạo Control Tip Text cho nút lệnh Các nút lệnh di chuyển mẫu tin và nút thoát được thiết kế bằng trình Wizart của
Lưu mẩu tin
Giải thích: trong đó [MacroError].[Description] là thuộc tính chứa nội dung lỗi do access thông báo khi phát hiện hành động có lỗi.
Các nút lệnh Thêm, Lưu, Xoá, Phục hồi được tạo rakhông sử dụng trình thông minh sau đó định nghĩa lại một số thuộc tính của các nút lệnh như sau:
• Vào thuộc tính Name của các nút lệnh lần lượt đặt tên cho chúng là: Them, Luu, Xoa, Phuchoi.
• Vào thuộc tính Picture của từng nút lệnh chọn hình phù hợp để làm nhãn cho các nút lệnh theo mẫu.
Khi Form mở ra mặc định là:
• Làm mờ nút “Lưu mẫu tin” (Me.Luu.Enabled=False),”phục hồi” (Me.Phuchoi.Enabled=False).
• Không cho phép thêm
(Me.AllowAdditions=False),xóa(Me.AllowDeletions=False), chỉ cho phép chỉnh sửa (Me.AllowEdits=True).
(các lệnh trên đuợc đưa vào thủ tục xử lý sự kiện On Open của form)
Vào thủ tục xử lý sự kiện của nút “thêm” thêm vào một đoạn lệnh sao cho khi nhắp chuột vào nút “Thêm” thì:
• Bật chếđộ thêm cho Form (Me.AllowAdditions=True)
• Thêm mẫu tin mới vào form ( DoCmd.GoToRecord , , acNewRec)
• Làm sáng lại các nút “Lưu mẫu tin” (Me.Luu.Enabled=True), nút ”phục hồi” (Me.Phuchoi.Enabled=True).
• Tắt chếđộ xóa của Form
Kiểm tra dữ liệu nhập vào cho TextBox Ngày phải <= ngày hiện hành. Nếu vi phạm thì thông báo lỗi và bắt nhập lại).
Hướng dẫn: Viết thủ tục xử lý sự kiện trong biến cố BeforeUpdate của Text box Ngay có nội dung như sau:
Private Sub Ngay_BeforeUpdate(Cancel As Integer) If Me.Ngay > Date Then
MsgBox "Ban phai nhap ngay viet hoa don <=" & Date Cancel = True
End If End Sub
Khi nhắp chuột vào nút "In hoá đơn" nếu dữ liệu của hóa đơn không có thì thông báo "không có dữ liệu in" và không mở report.
Hướng dẫn:
Viết thủ tục xử lý sự kiện trong biến cốOn NoData của Report R_Hoadon có nội dung như sau:
Private Sub Report_NoData(Cancel As Integer) MsgBox "Khong co du lieu in"
Cancel = True End Sub
Khi con trỏ vào Textbox trị giá thì chuyển con trỏ về lại text box số lượng. Private Sub Trigia_GotFocus()
Me.Soluong.SetFocus End Sub
MỤC LỤC
Baøi 1. REPORT – BÁO BIỂU ... 1
1.1. Chức năng và các dạng của report ... 1
1.1.1. Chức năng ... 1
1.1.2. Các dạng report ... 1
1.2. Cấu trúc chung của màn hình thiết kế report ... 3
1.2.1. Report header ... 3 1.2.2. Page header ... 3 1.2.3. <group header> ... 3 1.2.4. Detail ... 3 1.2.5. <group footer> ... 3 1.2.6. Page footer ... 4 1.2.7. Report footer ... 4
1.3. Các công cụ hỗ trợ trong màn hình thiết kế Report ... 4
1.4. Tạo report ... 6
1.4.1. Tạo bằng wizard ... 6
1.4.2. Thiết kế Report bằng phương pháp Design view ... 11
Baøi 2. MACRO ... 18
2.1. Khái niệm về macro ... 18
2.2. Các thành phần trong màn hình thiết kế macro ... 18
2.2.1. Cột Action ... 18
2.2.2. Cột Arguments ... 18
2.2.3. Cột Comment ... 18
2.2.4. Cột Action Arguments ... 19
2.2.5. Tạo điều kiện cho các hành động trong Macro ... 19
2.2.6. Tạo Macro nhóm ... 19
2.3. Các thao tác trên macro ... 20
2.3.1. Lưu macro hiện hành ... 20
2.3.2. Tạo mới một macro ... 21
2.3.3. Chạy thử macro ... 22
2.3.4. Sửa đổi macro đã tồn tại ... 22
2.3.5. Chọn môt hoặc nhiều hành động trong macro ... 23
2.3.6. Chèn thêm một hành động mới... 23
2.4.13. Requery: ... 28 2.4.14. RepaintObject: ... 28 2.4.15. FindRecord: ... 29 2.4.16. FindNext: ... 29 2.4.17. GotoRecord: ... 31