Hộp thoại tuỳ biến – UserForm

Một phần của tài liệu VBA tự động hoa trong thiết kế xây dựng (Trang 178 - 181)

CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL

8. Giao diện người dùng

8.3. Hộp thoại tuỳ biến – UserForm

Khi các hộp thoại mặc định trong Excel không đáp ứng được nhu cầu, người lập trình Excel có thể tạo ra các hộp thoại tuỳ biến của riêng mình thông qua các UserForm. Với khả năng tuỳ biến cao, người lập trình có thể sử dụng UserForm và các điều khiển trên đó để tạo ra những hộp thoại với nhiều tính năng hơn, phù hợp hơn với nhu cầu thực tế hơn. Việc tạo các hộp thoại tuỳ biến được thực hiện dễ dàng và hơn nữa với khả năng của mình, người lập trình có thể tạo ra các hộp thoại trông chẳng khác gì hộp thoại của chương trình Excel.

Hộp thoại tuỳ biến được tạo ra dựa trên UserForm thông qua VBAIDE. Thông thường, có thể tạo hộp thoại tuỳ biến theo các bước sau:

1. Tạo mới một UserForm vào trong dự án VBA của Workbook.

2. Viết thủ tục để hiển thị UserForm. Thủ tục này phải được đặt trong một mô-đun của VBA (chứ không phải đặt trong mô-đun của UserForm)

3. Chèn thêm các điều khiển cần thiết trên UserForm.

4. Điều chỉnh các điều khiển vừa thêm.

5. Viết mã lệnh cho các sự kiện tương ứng của các điều khiển (nếu cần). Các thủ tục này phải được đặt trong mô-đun của chính UserForm đó.

Sau khi thực hiện xong các bước trên, mỗi khi cần hiển thị hộp thoại tuỳ biến, chỉ cần thực thi thủ tục đã tạo ở bước 2.

8.3.1. To mi UserForm

Để tạo mới UserForm, khởi động VBAIDE (nhấn phím ALT+F11), chọn dự án ứng với workbook cần thờm Userform, sau đú chọn trỡnh đơn InsertUserForm. Cỏc UserForm sẽ được tự động đặt tên UserForm1, UserForm2,... Người lập trình có thể thay đổi tên của UserForm để dễ dàng nhận dạng UserForm thông qua cửa sổ Properties (chọn UserForm và nhấn phím F4 để hiển thị cửa sổ Properties).

171 Mỗi một workbook có thể chứa nhiều UserForm khác nhau, mỗi UserForm chính là một hộp thoại tuỳ biến.

8.3.2. Hin th UserForm

Để hiển thị UserForm, sử dụng phương thức Show của đối tượng UserForm. Phương thức này có cú pháp như sau:

object.Show modal Trong đó:

ỉ ỉ object: là đối tượng kiểu UserForm;

ỉ ỉ modal: là tham số tuỳ chọn, xỏc định kiểu hiển thị của UserForm. Modal cú thể là một trong hai giá trị vbModal hoặc vbModeless. Nếu là vbModal, người dùng phải đóng UserForm mới có thể tiếp tục thao tác với Excel. Nếu là vbModeless, người dùng vẫn có thể vừa thao tác trên UserForm, vừa thao tác trên Excel. Mặc định là giá trị vbModal. Đoạn mã sau sẽ hiển thị UserForm có tên là UserForm1 ở chế độ Modal:

UserForm1.Show

Ngoài ra, còn có một kỹ thuật khác để hiển thị UserForm: sử dụng phương thức Add của tập đối tượng UserForm, sau đó sử dụng phương thức Show để hiển thị UserForm. Phương thức này thích hợp khi trong dự án có nhiều UserForm và người có thể chỉ định sự xuất hiện của một UserForm bất kỳ. Đoạn mã sau sẽ hiển thị UserForm có tên là UserForm1:

MyForm = “UserForm1”

UserForms.Add(MyForm).Show

CHÚ Ý Thủ tục để hiển thị hộp thoại tuỳ biến (UserForm) phải được đặt trong một mô- đun chuẩn của VBA (chứ không phải đặt trong mô-đun của UserForm).

172

VBA còn có lệnh Load. Lệnh này chỉ tải UserForm vào trong bộ nhớ mà không hiển thị cho đến khi sử dụng phương thức Show của UserForm đó. Để tải UserForm1 vào bộ nhớ, thực hiện như sau:

Load UserForm1

Khi có một UserForm tương đối phức tạp (có nhiều thành phần điều khiển cùng với nhiều dữ liệu bên trong đó), nếu sử dụng lệnh Load để tải UserForm vào bộ nhớ thì UserForm sẽ được hiển thị nhanh hơn khi sử dụng phương thức Show. Tuy nhiên, trong đại đa số các trường hợp, chỉ cần sử dụng phương thức Show, bởi lẽ phương thức này cũng đã tự động thực hiện lệnh Load (nếu UserForm chưa được tải vào bộ nhớ) ngay trước khi hiển thị Userform.

Một khi đã được hiển thị, UserForm sẽ luôn tồn tại trên màn hình cho đến khi người dùng đóng nó lại. Vì vậy, thông thường, người lập trình sẽ tạo thêm một nút lệnh (Command Button) trên UserFrom để thực hiện thủ tục đóng UserForm. Thủ tục này có thể sử dụng lệnh Unload để dỡ bỏ UserForm khỏi bộ nhó của máy tính, hoặc sử dụng phương thức Hide của đối tượng UserForm để tạm thời ẩn UserForm.

Đoạn mã sau sẽ đóng cửa sổ UserForm1:

UserForm1.Hide

Hoặc có thể sử dụng đoạn mã sau để đóng cửa sổ UserForm1:

Unload UserForm1

Phương thức Hide chỉ tạm thời ẩn UserForm, bản thân UserForm vẫn còn trong bộ nhớ, các thuộc tính của UserFrom vẫn có thể được truy cập bình thường. Còn lệnh Unload thì sẽ gỡ bỏ UserForm ra khỏi bộ nhớ, lúc này các thuộc tính của UserForm sẽ không thể truy cập được nữa.

8.3.3. Các điu khin trên UserForm

Người lập trình có thể dùng rất nhiều loại điều khiển khác nhau lên UserForm. Thông tin chi tiết, xem lại mục “Làm việc với UserForm và các thành phần điều khiển” trang 61. Dưới đây chỉ trình bày thêm một điều khiển riêng của Excel, điều khiển RefEdit.

Điều khiển RefEdit cho phép người dùng lựa chọn một vùng dữ liệu bằng cách nhập địa chỉ hoặc nhập tên vùng dữ liệu hoặc sử dụng chuột để chọn trực tiếp trong worksheet. Khi người dùng kích chuột vào biểu tượng nhỏ ở góc phải của điều khiển, hộp thoại sẽ tạm thời được ẩn đi và một cửa sổ nhỏ để người dùng chọn vùng dữ liệu sẽ được hiện lên, giống hệt như các hộp thoại mặc định của Excel.

173

Hình IV-19: Điều khiển RefEdit

Điều khiển RefEdit cũng tương tự như điều khiển Textbox, vì vậy có thể tham khảo thêm về điều khiển TextBox để biết thông tin về các phương thức và thuộc tính của điều khiển RefEdit.

Khi thực hiện các thao tác sử dụng RefEdit, cần ghi nhớ những điểm sau:

ỉ ỉ Điều khiển RefEdit trả về chuỗi chứa địa chỉ của vựng dữ liệu. Sau đú, cú thể chuyển chuỗi đó thành đối tượng kiểu Range sử dụng đoạn mã tương tự như sau:

Dim UserRange As Range

Set UserRange = Range(RefEdit1.Text)

ỉ ỉ Nờn khởi tạo giỏ trị ban đầu cho điều khiển RefEdit bằng địa chỉ của vựng dữ liệu hiện hành. Để làm được như vậy, trong sự kiện UserForm_Initialize của UserForm cần thêm đoạn mã lệnh tương tự như sau:

RefEdit1.Text = ActiveWindow.Selection.Address

ỉ ỉ Đừng bao giờ nghĩ rằng RefEdit luụn trả về địa chỉ đỳng. Bởi lẽ khụng phải chỉ cú mỗi cách chọn vùng dữ liệu bằng chuột, người dùng còn có thể gõ và hiệu chỉnh địa chỉ hiển thị trên điều khiển RefEdit. Vì vậy, phải luôn kiểm tra tính đúng đắn của địa chỉ vùng dữ liệu. Đoạn mã sau minh hoạ cách kiểm tra lỗi này. Nếu vùng dữ liệu nhập vào không đúng, một hộp thông báo sẽ hiện lên, và cho phép người dùng nhập lại:

On Error Resume Next

Set UserRange = Range(RefEdit1.Text) If Err <> 0 Then

MsgBox “Invalid range selected”

RefEdit1.SetFocus Exit Sub

End If

On Error GoTo 0

ỉ ỉ Người dựng cú thể chọn một sheet khỏc trờn thẻ chứa cỏc sheet khi đang chọn vựng dữ liệu. Vì vậy, không nên giả sử rằng vùng dữ liệu được chọn sẽ nằm trên sheet hiện hành.

Tuy nhiên, nếu người dùng chọn một sheet khác, địa chỉ của vùng dữ liệu sẽ được tự động thêm vào một tiền tố là tên của sheet được chọn. Chẳng hạn như:

Sheet2!$A$1:$C$4

ỉ ỉ Nếu chỉ cần lấy địa chỉ của một ụ trong vựng dữ liệu mà người dựng đó chọn, người lập trình có thể chọn ra một ô ở góc trên bên trái của vùng dữ liệu đó bằng cách sử dụng đoạn mã lệnh như sau:

Set OneCell = Range(RefEdit1.Text).Range(“A1”)

GỢI Ý Để người dùng chọn một vùng dữ liệu nào đó, có thể sử dụng hộp thoại InputBox của Excel, xem thêm mục “Hộp thoại InputBox của Excel – Hàm InputBox” trang 162.

Một phần của tài liệu VBA tự động hoa trong thiết kế xây dựng (Trang 178 - 181)

Tải bản đầy đủ (PDF)

(285 trang)