Kiu 2: Lp cho n khi iu kin là FALSE
11. Làm việc với UserForm và các thành phần điều khiển
11.1. Các vấn đề chung
Trong một dự án VBA, các mô-đun chuNn cho phép xây dựng các khối chương trình xử lý dữ liệu hoặc các khai báo về dữ liệu. Sự giao tiếp nhập-xuất dữ liệu giữa người dùng và chương trình có thể được thực hiện thông qua giao diện của ứng dụng nền. Tuy nhiên, trong nhiều trường hợp giao diện nhập-xuất dữ liệu của ứng dụng nền chưa thể đáp ứng được nhu cầu tương tác dữ liệu một cách chi tiết cũng như tiện lợi cho người sử dụng, và khi đó, cần tạo ra các giao diện nhập-xuất riêng thông qua việc sử dụng các UserForm trong dự án VBA. Nói cách khác, giao tiếp giữa người sử dụng chương trình với chương trình viết bằng VBA được gọi là giao diện của chương trình và cách xây dựng giao diện như sau:
Sử dụng ngay ứng dụng nền để làm giao diện, cách này sẽ trình bày cụ thể trong các
http://www.ebook.edu.vn Sử dụng UserForm.
Kết hợp cả hai phương án trên.
Các UserForm thực chất là mẫu các hộp thoại (cửa sổ) được tạo ra theo yêu cầu của người dùng. Trên một UserForm luôn chứa những thành phần phục vụ cho nhu cầu tương tác giữa người dùng và chương trình: nhập các dữ liệu cần thiết, ra lệnh xử lý, lựa chọn dữ liệu theo tình huống, hiển thị kết quả xử lý một cách trực quan,… Những thành phần đó được gọi là các điều khiển (Control).
Hình II-26: Một ví dụ về UserForm.
to ra UserForm, làm theo trình t" sau:
1. Xác định sự cần thiết phải tạo giao diện nhập-xuất dữ liệu riêng: Giao diện do ứng dụng nền cung cấp không đủ hoặc không thích hợp cho việc nhập dữ liệu hoặc xuất kết quả của chương trình.
2. Xác định cách thức và trình tự tương tác của người sử dụng trên giao diện: để có thể bố trí các điều khiển sao cho thuận tiện đối với người dùng, ví dụ như theo thói quen điều khiển của đa số người sử dụng làtừ trái sang phải, từ trên xuống dưới.
3. Xác định số lượng UserForm cần phải tạo cho quá trình nhập dữ liệu cũng như việc hiển thị kết quả: chỉ nên sử dụng vừa đủ và phân theo chủ đề của công việc, ví dụ nên phân tách giao diện nhập dữ liệu với giao diện trình bày kết quả và các điều khiển (nút bấm) khác.
4. Xác định các loại dữ liệu cần nhập vào, các dữ liệu theo tình huống và các minh hoạ bằng hình ảnh kèm theo để giải thích rõ cho người sử dụng ý nghĩa của các thông số cần được nhập vào. Căn cứ vào các loại dữ liệu cần nhập trên để xác định các thành phần điều khiển phù hợp và đưa vào UserForm tương ứng. Cần chú ý rằng, các điều khiển, ngoài việc đáp ứng yêu cầu về mặt chức năng, chúng cũng cần được trình bày và giải thích một cách dễ hiểu và có tính thNm mỹ.
Điều khiển cho phép nhập dữ liệu dạng văn bản
Điều khiển cho phép người dùng ra lệnh thông qua việc kích chuột.
Điều khiển cho phép chèn hình ảnh minh hoạ.
Điều khiển lựa chọn dữ liệu
Hình II-27: Ý nghĩa các loại dữ liệu cần nhập vào được minh họa bằng hình ảnh.
5. Lựa chọn các điều khiển phục vụ cho việc xác nhận dữ liệu sau khi nhập xong hoặc ra lệnh cho quá trình xử lý các dữ liệu này bắt đầu thực hiện. Thông thường các điều khiển này là hệ thống các nút bấm (Button) để xác nhận các dữ liệu đã nhập xong, yêu cầu bắt đầu xử lý hoặc hủy bỏ các dữ liệu đã nhập.
Hình II-28: Bố trí các điều khiển trên UserForm.
http://www.ebook.edu.vn
6. Lựa chọn hình thức hiển thị kết quả từ đó lựa chọn các thành phần điều khiển phù hợp, ví dụ như kết quả tính toán là số hoặc hình vẽ thì cần chọn điều khiển thích hợp để trình bày.
Hình II-29: Trình bày kết quả bằng điều khiển hỗ trợ văn bản và hình ảnh.
7. Viết mã lệnh cho các thành phần điều khiển. Mã lệnh này sẽ được lưu trữ trong phần code của UserForm.
11.1.1. Tạo UserForm và các thành phần điều khiển trong VBA IDE.
Trong VBA IDE, UserForm được tạo ra bằng cách chọn trình đơnInsertUserForm
Sau khi tạo UserForm, ta có thể thêm các thành phần điều khiển vào UserForm bằng cách lựa chọn điều khiển cần dùng từ hộp công cụ điều khiển (Control Toolbox) và thực hiện thao tác kéo/thảvào vị trí thích hợp UserForm. Kích thước của điểu khiển có thể thay đổi một cách dễ dàng nhờ thao tác kéo chuột ở vùng biên của chúng.
Thông thường trong hộp công cụ mặc định của VBA IDE chỉ có các thành phần điều khiển chuNn của VB, các điều khiển này đáp ứng được hầu hết các nhu cầu cơ bản về thiết kế giao diện. Tuy nhiên người dùng có thể bổ sung những thành phần điều khiển khác vào hộp công cụ trên bằng cách sử dụng Additional Controlscó sẵn trên hộp công cụ (hiển thị bằng cách nhấn chuột phải vào hộp công cụ). Với mỗi máy tính khác nhau thì nội dung các điều khiển có thể bổ sung là khác nhau bởi chúng phục thuộc vào các thư viện lập trình được cài đặt trên máy tính đó.
Điều khiển được lựa chọn trên Control Toolbox
Điều khiển được tạo bằng cách kéo/thả vào UserForm
Hình II-30: Bổ sung thêm điều khiển cho hộp công cụ (Toolbox) của VBA IDE.
11.1.2. Các thuộc tính của UserForm và các thành phần điều khiển.
Các thuộc tính (Properties) là các thông số quy định đặc điểm, tính chất cũng như trạng thái của UserForm hay các điều khiển, ví dụ màu nền của một điểu khiển được quy định bởi thuộc tính BackColor. Những thuộc tính này có thể được thay đổi trong lúc thiết kế UserForm hoặc lúc chương trình đang chạy. Tuy nhiên một số thuộc tính không cho phép thay đổi mà chỉ cho phép người dùng biết được giá trị của nó (thuộc tính chỉ đọc – Read Only). Trong quá trình thiết kế UserForm, khi ta dùng chuột chọn bất cứ thành phần nào trên UserForm (kể cả chính UserForm) thì các thuộc tính của nó sẽ được hiển thị tương ứng trong cửa sổ Properties của VBA IDE.
Hình II-31: Thành phần điều khiển và vị trí hiển thị các thuộc tính của nó.
Một số thuộc tính cơ bản của UserForm và các điều khiển:
http://www.ebook.edu.vn Thuc tnh Gii thch
Name Thể hiện tên của UserForm hay điều khiển. Đây là thuộc tính rất quan trọng, là yếu tố xác định điều khiển khi lập trình. Thuộc tính này chỉ được thay đổi lúc thiết kế giao diện (trong của sổ Properties của VBA IDE).
BackColor Giá trị kiểu Long thể hiện màu nền của UserForm hay điều khiển.
Caption Giá trị kiểu String thể hiện tiêu đề của UserForm hay điều khiển.
Enable Giá trị kiểu logic (Boolean) xác định trạng thái làm việc của điều khiển, giá trị bằng True ứng với trạng thái hoạt động, giá trị bằng False ứng với trạng thái không hoạt động (điều khiển coi như bị vô hiệu hoá và thường được hiển thị mờ đi trên UserForm).
Visible Giá trị kiểu logic (Boolean) xác định trạng thái hiển thị của điều khiển, giá trị bằng True ứng với sự hiển thị điều khiển, giá trị bằng False ứng với sự ẩn điều khiển.
Font Thể hiện kiểu và cỡ chữ hiển thị trên UserForm hoặc điều khiển.
Picture Thể hiện hình ảnh trên nền UserForm hoặc điều khiển.
ControlTipText Giá trị kiểu String thể hiện chú thích về điều khiển khi chuột di chuyển qua (Tooltip) trong lúc chương trình hoạt động.
MouseIcon Thể hiện biểu tượng con trỏ chuột hiển thị trên điều khiển.
MousePointer Thể hiện loại con trỏ chuột hiển thị trên nút lệnh.
CỢI Ý Ngoài ra, ứng với mỗi loại điều khiển có thể còn có thêm nhiều thuộc tính khác hoặc không có một số các thuộc tính được liệt kê ở trên. Người dùng có thể tìm hiểu các thuộc tính này trong Object Browser hoặc trong Help (chọn điều khiển và bấm F1) của VBA IDE.
Việc thay đổi thuộc tính của các điều khiển có thể được thực hiện bằng hai cách:
1. Cách 1: Thay đổi trực tiếp trong quá trình thiết kế: chọn điều khiển và thay đổi giá trị của các thuộc tính trong cửa sổ Properties của VBA IDE. Cách này trực quan và dễ thực hiện đối với đa số các thuộc tính của hầu hết các điều khiển. Ví dụ: để thay đổi tiêu đề cho một UserForm dưới đây, kích chuột chọn UserForm sau đó nhập tên của tiêu đề vào phần Caption của cửa sổ Properties.
Hình II-32: Thay đổi giá trị thuộc tính trong khi thiết kế UserForm.
2. Cách 2: Thay đổi trong lúc chương trình đang chạy: về thực chất, các thuộc tính chính là dữ liệu của các thành phần điều khiển (thường gọi chung các điều khiển này là đối tượng) hay chính là các biến được định nghĩa riêng cho điều khiển đó cho nên ta có thể sử dụng phép gán thông thường để thay đổi giá trị cho một số thuộc tính. Cú pháp thực hiện như sau:
<Tên_điều_khiển>.<Tên_thuộc_tính> = giá trị thuộc tính
<Tên_UserForm>.<Tên_thuộc_tính> = giá trị thuộc tính
GỢI Ý Tên_điều_khiển hay Tên_UserForm ở đây chính là giá trị thuộc tính Name của điều khiển đã được đặt khi thiết kế. Khi viết mã lệnh trong một UserForm thì có thể thay việc dùng tên của UserForm đó bằng từ khoáMe.
Ví dụ, ứng vớiUserFormcó tên làUserForm1như ở trên, có thể thay đổi tiêu đề của nó bằng mã lệnh như sau:
UserForm1.Caption = “Cua so chinh”
11.1.3. Các phương thức của UserForm và các thành phần điều khiển.
Các phương thức có thể xem chúng là những chương trình con đặc biệt, chúng chỉ làm việc với các dữ liệu của điều khiển và tương tác lên chính điều khiển đó. Để phương thức hoạt động, cần phải gọi nó (tương tự như gọi chương trình con) bằng mã lệnh khi lập trình. Cú pháp gọi phương thức của một điều khiển hay UserForm cũng tương tự như với biến đối tượng:
<Tên_điều_khiển>.<Tên_phương_thức> <(tham_số_của_phương_thức)>
<Tên_UserForm>.<Tên_phương_thức> <(tham_số_của_phương_thức)>
Ví dụ: muốn hiển thị UserForm1 như ở trên, gọi phương thức Show của nó với mã lệnh như sau:
UserForm1.Show
Trong phạm vi của giáo trình, không thể liệt kê tất cả các phương thức của các điều khiển.
Trong phần sau sẽ trình bày một số các phương thức cơ bản của một số loại điều khiển thông dụng. Để biết chi tiết về những phương thức khác, có thể tra cứu trong Object Browser hoặc trong Help của VBA IDE
11.1.4. Các sự kiện trên giao diện.
Các sự kiện trên UserForm hoặc các điều khiển được 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 đó).Ví dụ, khi người dùng rê chuột trên bề mặt UserForm sẽ phát sinh sự kiện MouseMove, khi người dùng kích chuột trên UserForm sẽ phát sinh sự kiện Click.
Đi cùng với sự kiện còn cóthủ tục sự kiện: là chương trình được thi hành khi sự kiện xảy ra.
Thủ tục sự kiện cho phép người lập trình xử lý các tương tác của người dùng trên giao diện bằng cách viết các mã lệnh trong thủ tục sự kiện.
Để viết mã lệnh cho một thủ tục sự kiện trên một UserForm, vào cửa sổ mã lệnh của UserForm đó (nháy đúp chuột vào UserForm), chọn điều khiển và loại sự kiện tương ứng. Sau đó viết mã lệnh vào trong thủ tục sự kiện đã được tạo ra.
http://www.ebook.edu.vn Một số sự kiện cơ bản của UserForm và các điều khiển:
S kin Gii thch
Click xảy ra khi người dùng kích chuột trên UserForm hoặc trên điều khiển DblClick xảy ra khi người dùng kích đúp chuột trên UserForm hoặc trên điều khiển KeyPress xảy ra khi người dùng nhấn một phím
KeyUp xảy ra khi người dùng nhả một phím (sau khi đã nhấn xuống) KeyDown xảy ra khi người dùng nhấn một phím (nhưng chưa nhả ra)
MouseMove xảy ra khi người dùng rê chuột ngang qua một điều khiển hoặc trên UserForm MouseUp xảy ra khi người dùng nhả phím chuột (sau khi đã nhấn chuột)
MouseDown xảy ra khi người dùng nhấn phím chuột (nhưng chưa nhả ra) 11.1.5. Ví dụ.
Tạo một UserForm và viết mã lệnh để khi kích chuột vào UserForm sẽ hiển thị số lần kích chuột trên tiêu đề của nó đồng thời đổi màu nền của UserForm theo tình huống: nếu số lần kích chuột là chẵn thì màu đen, là lẻ thì màu trắng.
Các thao tác như sau:
1. Thêm UserForm vào trong dự án bằng cách chọn InsertUserForm.
2. Đặt tên UserForm là “usfCuaso1” trong thuộc tính Name của cửa sổ Properties; đặt tiêu đề xuất phát của UserForm là “Cua so chinh” trong thuộc tính Caption của cửa số Properties.
Chọn đối tượng Chọn sự kiện
Thủ tục sự kiện gắn với đối tượng được phát sinh
Hình II-33: Một ví dụ về đặt tên cho Form.
3. Viết mã lệnh cho sự kiện Click của UserForm (hiển thị cửa sổ lệnh của UserForm bằng cách nháy đúp chuột vào UserForm, chọn UserForm và sự kiện Click).
Mã lệnh cho thủ tục sự kiện Click như sau:
Private Sub UserForm_Click() Static numClick As Long numClick = numClick + 1 If numClick Mod 2 = 0 Then
Me.BackColor = vbBlack Else
Me.BackColor = vbWhite End If
usfCuaso1.Caption = "Number of Click: " & Str(numClick) End Sub
GỢI Ý Trong đoạn mã trên, vbBlack là hằng số tương ứng với màu đen, vbWhite là hằng số tương ứng với màu trắng. Hai hằng số này được định nghĩa sẵn trong VB.