3.2.1. GIỚI THIỆU VỀ MODULE
a) MODULE CHUNG
Dùng để chứa các thủ tục và hàm chung do người thiết kế tự lập trình bằng ngơn ngữ VBA để bổ sung cho file cơ sở dữ liệu mà ta cĩ thể chạy ở bất kỳ vị trí nào trong ứng dụng.
b) MODULE RIÊNG CỦA ĐỐI TƯỢNG FORM, REPORT
Dùng để chứa các thủ tục xử lý sự kiện liên kết với Form hay Report. Ta khơng thể lưu riêng module loại này mà chúng gắn liền với Form hoặc Report. Khi ta sao chép Form hay Report từ tập tin CSDL này sang tập tin CSDL khác thì các Module này cũng được chép sang cùng với nĩ và nếu ta xĩa Form hoặc Report thì chúng cũng bị xĩa theo.
3.2.2. CÁCH MỞ CỬA SỔ MODULE ĐỂ VIẾT MÃ LỆNH a) MỞ MODULE CHUNG a) MỞ MODULE CHUNG
Hình 3.1: Chọn muc Module để tạo mới Module
Xuất hiện màn hình soạn thảo
Hình 3.2: Cửa sổ soạn thảo mã lệnh
b) MỞ MODULE RIÊNG CỦA FORM HOẶC REPORT
Hình 3.4: Cửa sổ soạn thảo mã lệnh của Form
3.2.3. CÁC THÀNH PHẦN TRONG MỘT MODULE a) CÁC KHAI BÁO a) CÁC KHAI BÁO
Là các câu lệnh dùng định nghĩa các biến, hằng, loại dữ liệu người dùng.
b) THỦ TỤC XỬ LÝ SỰ KIỆN (EVENT PROCEDURE)
Là các thủ tục nằm tại các Module của Form hoặc Report. Chúng sẽ được thực hiện khi các sự kiện của Form hoặc Report hoặc của các điều khiển xảy ra.
c) THỦ TỤC CHUNG (GENERAL PROCEDURE)
Là các thủ tục khơng trực tiếp liên quan đến một đối tượng hoặc biến cố nào cả. Ta cĩ thể tạo chúng trên Module chung hoặc Module của Form, Report. Thủ tục chung chỉ được thi hành khi nào ta gọi đến nĩ.
a) Ý NGHĨA
Khi Access nhận thấy cĩ một sự kiện (biến cố) xảy ra trên Form, Report hoặc Control nĩ sẽ tự động thi hành thủ tục biến cố đã tạo cho đối tượng và biến cố đĩ. Do đĩ, để thực hiện một số hành động nào đĩ để đáp lại một biến cố đặc biệt ta phải đưa các hành động đĩ vào một thủ tục biến cố
b) TÊN CỦA THỦ TỤC XỬ LÝ SỰ KIỆN
<Form / Report>_<Tên biến cố> <Tên Control>_<Tên biến cố>
Thí dụ:
- Thủ tục biến cố cho sự kiện Mở Form cĩ tên là Form_Open
- Thủ tục biến cố cho sự kiện Click chuột vào nút tên cmdThem là
cmdThem_Click.
c) TẠO THỦ TỤC BIẾN CỐ
Tạo thủ tục biến cố cho nút lệnh cmd_chao khi click chuột nút lệnh sẽ hiển thị lời chào “Xin chao tat ca cac ban hoc vien”.
Hình 3.5: Form chứa nút cmd_chao mà ta cần tạo thủ tục biến cố
- Cách 1:
Bước 1: Mở bảng thuộc tính của đối tượng cần tạo thủ tục biến cố.
Hình 3.7: Chuẩn bị viết thủ tục biến cố cho nút cmd_chao
- Cách 2
Bước 1: Bấm chuột phải vào nút cmd_Hello và chọn Build Event
Hình 3.8: Chọn lệnh Build Event trong menu đối tượng
Bước 2: Xuất hiện hộp thoại Choose Builder, chọn Code Builder
Hình 3.9: Hộp thoại Choose Builder
- Cách 3
Trong cửa sổ soạn thảo mã lệnh, ta chọn Đối tượng cần tạo biến cố ở Combo Box bên trái
Hình 3.10: Chọn đối tượng cần viết thủ tục biến cố
Và chọn tên Biến cố ở Combo Box bên phải.
Hình 3.11: Chọn biến cố
3.2.5. THỦ TỤC CHUNG (PROCEDURE) a) Ý NGHĨA a) Ý NGHĨA
- Ta tạo thủ tục chung nhằm mục đích tạo ra các chức năng của riêng mình nhằm tự động tính tốn một số cơng việc thường xuyên cần thực hiện.
- Muốn các thủ tục này được sử dụng chung cho tồn bộ chương trình ứng dụng. - Tránh các đoạn lệnh trùng lắp và giúp người lập trình dễ bảo trì chương trình
ứng dụng.
b) PHÂN LOẠI
Bao gồm Thủ tục Hàm (Function) và Thủ tục Con (Sub)
• Thủ tục hàm: cho phép trả về một giá trị. Do đĩ, thủ tục hàm được sử dụng trong các biểu thức. Cĩ thể nhận tham số vào.
• Thủ tục con: cho phép thực hiện các hành động nhưng khơng trả về một giá
trị và do đĩ thủ tục con khơng được dùng trong biểu thức. Cĩ thể nhận tham số vào.
c) CÚ PHÁP KHAI BÁO VÀ GỌI THỦ TỤC CON Cú pháp khai báo:
[Public | Private] [Static] Sub Tên thủ tục ([Tham số])
của 2 số đĩ.
Hình 3.12: Thủ tục con để tìm USCLN của 2 số x và y
Gọi thủ tục con: ta cĩ thể gọi thủ tục con bằng một trong 2 cách sau: Cách 1: Call <tên thủ tục con>(<danh sách tham số>)
Ví dụ: Call USCLN(6,9)
Cách 2: <tên thủ tục con> <danh sách tham số> Ví dụ: USCLN 6,9
Lưu ý: ta khơng được đặt cặp dấu ngoặc đơn vào danh sách các tham số khi
gọi nĩ (trừ cú pháp gọi thủ tục con bằng lệnh Call).
d) CÚ PHÁP KHAI BÁO VÀ GỌI THỦ TỤC HÀM Cú pháp khai báo:
[Public | Private] [Static] Function <Tên Hàm> ([<Tham số>]) As <Kiểu giá trị
trả về>
<Khối lệnh>
<Tên Hàm> = <Giá trị trả về> End Sub
- Khối lệnh: là dãy các câu lệnh VBA mà ta muốn thi hành khi thủ tục được
gọi.
- Tham số: danh sách các tham số gởi vào để cĩ giá trị cần cho thủ tục để tính tốn bên trong.
- Giá trị trả về: là giá trị mà hàm trả về sau khi tính tốn bên trong thủ tục
hàm.
Cú pháp gọi thủ tục hàm:
<Tên biến nhận giá trị trả về> = <Tên thủ tục hàm> (<tham số 1>,< tham số 2>,…)
Thí dụ: Viết thủ tục hàm truyền vào 2 tham trị x và y. Tính và trả về USCLN
của 2 số đĩ.
Hình 3.13: Hàm tìm USCLN của 2 số x và y
Sau đĩ ta cĩ thể gán biến US nhận lấy kết quả của hàm Uscln như sau: US=Uscln(9,6)
Hoặc in kết quả của hàm ra hộp thoại Msgbox Msgbox Uscln(9,6)
Lưu ý:
- Danh sách các tham số truyền cho thủ tục hàm phải nằm trong cặp dấu ngoặc đơn.
- Thơng thường câu lệnh cuối cùng trong thủ tục hàm phải là câu lệnh gán <Tên hàm = <Giá trị trả về của hàm>.
- Khi gọi đến một hàm phải cĩ một biến hoặc điều khiển nhận giá trị trả về từ hàm.
e) CÚ PHÁP KHAI BÁO CÁC THAM SỐ TRONG THỦ TỤC (CON/HÀM) [Byval | ByRef] <Tên tham số> As <Kiểu dữ liệu> [=<Giá trị mặc định>]
Trong cửa sổ soạn thảo lệnh (View Code), ta chọn Insert / Procedure…
Hình 3.14: Chọn lệnh Insert/Procedure để tạo thủ tục cho Module
Xuất hiện hộp thoại
Hình 3.15: Hộp thoại khai báo tạo thủ tục
Gõ tên thủ tục vào ơ Name, chọn loại thủ tục là Sub hay Function ở mục Type và chọn phạm vi áp dụng Public hay Private ở mục Scope
All Local variables as Statics: tồn bộ các biến trong thủ tục là biến tĩnh
g) BIÊN DỊCH THỦ TỤC
Chọn lệnh Debug / Compile… để biên dịch tất cả các thủ tục trong tập tin CSDL. Nếu cĩ lỗi sẽ dừng lại cho ta sửa.
h) CHẠY THỬ
- Chọn lệnh View/Immediate Window (Ctrl+G)
- Trong cửa sổ Immediate ta gõ tên thủ tục con và tham số (nếu cĩ) rồi bấm Enter. Nếu là thủ tục hàm thì ta thêm dấu ? ở phía trước tên thủ tục hàm .
3.2.7. KHAI BÁO BIẾN a) Ý NGHĨA a) Ý NGHĨA
- Là đối tượng trung gian dùng để lưu trữ các giá trị tính tốn khi chạy chương trình.
- Giá trị của các biến sẽ mất đi khi chương trình ứng dụng chấm dứt hoạt động. - Microsoft Access cĩ hai cơ chế khi sử dụng biến: tường minh (khai báo) và
khơng tường minh (khơng khai báo biến) trước khi sử dụng.
b) CÚ PHÁP
Dim <Tên biến>[As <Kiểu dữ liệu>]
- Tên biến: là tên do ta tự đặt theo quy ước đặt tên mà Microsoft Access đã quy ước. Tên biến khơng phân biệt chữ hoa hoặc chữ thường. Ta khơng nên đặt tên biến quá dài mà nên đặt tên biến ngắn gọn mang tính gợi nhớ. Thơng thường tên biến gồm 2 phần: phần đầu nĩi lên kiểu dữ liệu của biến, phần cuối là tên gợi nhĩ của biến.
Thí dụ: khai báo biến kiểu chuỗi dùng để chứa tên một biểu mẫu và biến N kiểu số nguyên:
Dim strFrmName As String Dim intN As Integer
- Kiểu dữ liệu: là một trong các kiểu dữ liệu cơ bản. Nếu ta bỏ qua phần khai báo kiểu dữ liệu thì biến sẽ cĩ kiểu dữ liệu thay đổi (Variant).
c) KHAI BÁO BIẾN TƯỜNG MINH VÀ KHƠNG TƯỜNG MINH
Để bắt buộc người lập trình phải khai báo biến tường minh trước khi sử dụng ta dùng câu lệnh câu lệnh Option Explicit ở đầu Module. Ngược lại nếu khơng cĩ câu lệnh này thì coi như ta khai báo biến khơng tường minh. Việc khai báo biến tường minh giúp ta tránh được việc sử dụng sai tên các biến vì khi biên dịch Access sẽ thơng báo lỗi khi phát hiện ra các biến cĩ sử dụng nhưng chưa khai báo để ta cĩ thể sửa đổi.
d) TẦM ẢNH HƯỞNG CỦA BIẾN
- Khi ta khai báo biến trong một thủ tục thì chỉ cĩ các câu lệnh bên trong thủ tục mới đọc hoặc tác động làm thay đổi giá trị của biến đĩ. Ta nĩi tầm ảnh hưởng của biến mang tính cục bộ trong thủ tục đĩ. Nếu ta muốn cĩ tầm ảnh hưởng là tất cả thủ tục trong một Module hoặc tất cả các Module của ứng dụng thì ta phải khai báo nĩ ở đầu Module kết hợp với các từ khĩa Public hoặc Private. Tĩm lại tầm ảnh hưởng của biến phụ thuộc vào vị trí khai báo biến và các từ khĩa. - Bảng tầm ảnh hưởng theo tứ khĩa:
Tầm ảnh hưởng Private Public
Cấp thủ tục
Các biến cĩ tính cục bộ ngay trong thủ tục khai báo biến.
Khơng thể khai báo biến tồn cục trong thủ tục.
Cấp Module
Các biến cĩ tính cục bộ ngay tại Module được khai báo
Các biến cĩ thể sử dụng cho tất cả các Module chung trong ứng dụng
e) CÁC BIẾN SỬ DỤNG TRONG MỘT THỦ TỤC
Các biến cấp thủ tục chỉ được nhận ra ở tại thủ tục mà chúng khai báo. Chúng được xem như một dạng biến cục bộ. Ta cĩ thể khai báo nĩ bằng các lệnh Dim hoặc Static.
Thí dụ: khai báo biến cục bộ X cĩ kiểu số nguyên
Dim intX As Integer hoặc
Static intX As Integer
Lưu ý: các biến cục bộ được khai báo bằng từ khĩa Dim chỉ tồn tại khi thủ tục
đang thực hiện. Cịn những biến cục bộ được khai báo bằng từ khĩa Static sẽ tồn tại trong tồn bộ thời gian ứng dụng đang thực hiện.
f) CÁC BIẾN SỬ DỤNG TRONG CÙNG MỘT MODULE
Để khai báo biến sử dụng chung cho cùng một Module ta đặt chúng ở đầu Module và dùng từ khĩa Dim hoặc Private.
Thí dụ: khai báo biến X cĩ kiểu nguyên dùng chung cho một Module
Option Compare Database Option Explicit
Dim intX As Integer hoặc
Private intX As Integer
g) CÁC BIẾN SỬ DỤNG CHUNG CHO TẤT CẢ CÁC MODULE
Để khai báo biến sử dụng chung cho tất cả các Module ta đặt chúng ở đầu Module và dùng từ khĩa Public.
được mở.
- Thời gian sống của những biến cục bộ trong các thủ tục chỉ bằng với thời gian mà thủ tục đĩ được chạy. Nĩ được khởi tạo khi chạy thủ tục và được giải phĩng khi chạy xong thủ tục. Nếu muốn lưu giữ lại thì ta cĩ thể dùng từ khĩa Static.
3.2.8. KHAI BÁO HẰNG a) Ý NGHĨA a) Ý NGHĨA
- Bên trong đoạn lệnh của ta cĩ thể chứa các giá trị khơng thay đổi và các giá trị này xuất hiện nhiều nơi trong thủ tục, hoặc phụ thuộc vào các số nào đĩ rất khĩ nhớ. Trong trường hợp này ta cĩ thể cải tiến cho các đoạn lệnh trở nên dễ đọc và dễ bảo trì hơn bằng cách sử dụng các hằng số.
- Một hằng là một tên đầy đủ dùng thay thế cho một chuỗi hay một số mà giá trị của nĩ khơng thay đổi trong suốt thời gian ứng dụng vận hành.
- Ta khơng thể sửa đổi hoặc gán giá trị mới vào cho một hằng.
- Hằng cĩ từ một trong hai nguồn: thứ nhất là do hệ thống định nghĩa, thứ hai do người dùng định nghĩa.
b) CÚ PHÁP
[Public | Private] Const Tên hằng [As Kiểu dữ liệu] = biểu thức
- Tên hằng: theo quy ước đặt tên đã nĩi ở trên - Kiểu dữ liệu: là một trong các kiểu dữ liệu cơ bản.
- Biểu thức: là sự kết hợp của số hay hằng chuỗi và các tốn tử.
c) THÍ DỤ
Const Pi = 3.14159 → Khai báo hằng Pi cĩ giá trị 3.14159
Const DoublePi = Pi * 2 → Khai báo hằng DoulePi cĩ giá trị bằng 2*Pi
Public Const Max = 10 → Khai báo hằng Max cĩ giá trị bằng 10
Const Ngay = #1/7/2006# → Khai báo hằng Ngay cĩ giá trị bằng #1/7/2006#
a) Ý NGHĨA:
Khi khai báo hằng hoặc biến ta cần phải chỉ ra kiểu dữ liệu của nĩ. Kiểu dữ liệu của biến dùng chỉ định loại dữ liệu mà biến sẽ lưu trữ. Mặc định khi ta khai báo biến mà khơng chỉ ra kiểu dữ liệu thì kiểu dữ liệu của nĩ sẽ là Variant (là kiểu thay đổi được)
b) CÁC KIỂU DỮ LIỆU CƠ BẢN
Tên kiểu Ý nghĩa Miền giá trị Số Byte
Byte Số nguyên 0 → 255 1
Boolean Logic 0: false ; -1: true 2
Integer Số nguyên -32768 →32767 2
Long Số nguyên -2147483648 →2147483647 4
Currency Số thực - 922337203685774.5808 → 922337203685774.5808
8 Single Số thực -3.402823E38 → -1.401298E-45 (âm)
1.401298E-45 →3.402823E38 (dương)
4 Double Số thực -1.79769313486232E308 → -4.94065645841247E-324 (âm) 4.94065645841247E-324 → 1.79769313486232E308 (dương) 8 Date Ngày 1/1/100 → 32/12/9999 8
String Chuỗi Khơng quá 2 tỷ ký tự
Variant Bất kỳ dữ liệu gì 16
Object Bất kỳ đối tượng nào
4
c) KIỂU DỮ LIỆU SỐ
- Dùng để khai báo cho các biến kiểu số.
- Nếu biến chứa giá trị nguyên thì ta dùng kiểu Integer hoặc Long - Nếu biến chứa giá trị lẻ thì ta dùng kiểu Single, Double, Currency.
d) KIỂU DỮ LIỆU CHUỖI
- Dùng để khai báo cho các biến chứa giá trị là một chuỗi ký tự.
- Khi khai báo một biến kiểu chuỗi thì chiều dài của nĩ thay đổi tùy theo giá trị dữ liệu mà nĩ chứa đựng.
- Nếu muốn biến kiểu chuỗi cĩ chiều dài cố định thì ta dùng cú pháp
String *kích thước
Thí dụ: Dim Ten As String *8 (Biến Ten kiểu chuỗi cĩ độ dài 8 ký tự)
- Khi một kiểu dữ liệu số được chuyển thành ngày, các giá trị bên trái dấu chấm thập phân sẽ đại diện cho ngày và các giá trị bên phải dấu chấm thập phân sẽ đại diện cho giờ.
- Ta cĩ thể dùng hàm Cdate để chuyển đổi 1 con số thành kiểu dữ liệu ngày. Thí
dụ: Cdate(2) = #1/1/1900#
g) KIỂU DỮ LIỆU THAY ĐỔI (VARIANT)
- Là kiểu dữ liệu cĩ thể lưu trữ nhiều loại dữ liệu khác nhau.
- Biến cĩ kiểu Variant cĩ thể chứa các loại dữ liệu số, chuỗi, ngày hoặc giá trị Null.
- VBA sẽ tự động chuyển đổi kiểu dữ liệu cho phù hợp khi ta gán những kiểu dữ liệu này cho các biến kiểu Variant.
- Thí dụ:
Dim X → Biến X được khai báo cĩ kiểu Variant
X = “10” → X chứa giá trị kiểu chuỗi “10”
X = X – 2 → X chứa giá trị kiểu số là 8
X = X & “A” → X chứa giá trị kiểu chuỗi là “8A”
- Cĩ thể dùng hàm IsNumeric để kiểm tra xem biến cĩ chứa giá trị kiểu số hay khơng. Hàm này trả về giá trị True khi biến được kiểm tra chứa giá trị kiểu số. - Cĩ thể dùng hàm IsDate để kiểm tra xem biến cĩ chứa giá trị kiểu ngày hay
khơng. Hàm này trả về giá trị True khi biến được kiểm tra chứa giá trị kiểu ngày.
- GIÁ TRỊ RỖNG (EMPTY)
Khi một biến cĩ kiểu Variant khi khởi tạo nĩ sẽ được gán một giá trị rỗng. Giá trị rỗng là giá trị đặc biệt. Giá trị này khác với giá trị khơng, một chuỗi rỗng (cĩ chiều dài bằng khơng) hoặc giá trị Null. Để kiểm tra một biến cĩ giá trị rỗng