158 Set sc = chrt.SeriesCollection ' Thêm chuỗi số liệu mới. sc.Add [ThemSoLieu], xlColumns, True, False, False ' Lấy chuỗi số liệu cuối trong tập đối tượng SeriesCollection ' chính là chuỗi số liệu mới bổ sung. Set sr = sc(sc.Count) ' Đổi dạng biểu đồ cho chuỗi số liệu mới. sr.ChartType = xlColumnClustered End Sub 7.6. Sử dụng các hàm có sẵn trong Excel Người lập trình có thể tận dụng các hàm có sẵn của Excel trong khi lập trình trên VBA thông qua đối tượng WorksheetFunction. Đối tượng này là một thuộc tính của đối tượng gốc Application. Ví dụ sau sẽ tìm giá trị nhỏ nhất trên vùng dữ liệu A1:A10 bằng cách sử dụng hàm Min của Excel: Set myRange = Worksheets("Sheet1").Range("A1:C10") answer = Application.WorksheetFunction.Min(myRange) MsgBox answer 8. Giao diện người dùng Khi xây dựng chương trình, để người khác có thể dùng được, người lập trình cần phải đặc biệt chú ý đến giao diện người dùng. Giao diện người dùng được hiểu là cách thức mà người sử dụng sẽ tương tác với chương trình bằng cách nhấn nút bấm, chọn một trình đơn, nhấn phím, chọn trên thanh công cụ,… Khi xây dựng các ứng dụng, cần phải luôn ghi nhớ rằng mục đích xây dựng chương trình là để cho người dùng cuối sử dụng. Người lập trình thường có kinh nghiệm sử dụng máy tính hơn người dùng, cho nên, với một giao diện nào đó thì đối với người lập trình là dễ sử dụng trong khi đó, đối với người sử dụng lại rất khó dùng. Khi một chương trình được triển khai xây dựng dựa trên VBA của Excel thì hợp lý nhất là nên hướng đến việc sử dụng những tính năng sẵn có c ủa chính Excel làm giao diện, có như vậy ta mới tận dụng được một trong những thế mạnh của Excel, đó là giao diện thân thiện, đơn giản C C H H Ư Ư Ơ Ơ N N G G I I V V : : L L Ậ Ậ P P T T R R Ì Ì N N H H T T R R Ê Ê N N M M I I C C R R O O S S O O F F T T E E X X C C E E L L 159 và hiệu quả. Với định hướng thiết kế giao diện như vậy, ta nên sử dụng hệ thống trình đơn, thanh công cụ và chính bảng tính làm giao diện chính cho ứng dụng của mình. Như vậy trong Excel, người dùng có thể sử dụng những tính năng được cung cấp sẵn để thiết kế giao diện cho chương trình của mình và sau đây là một số phương án thiết kế giao diện nên sử dụng khi lập trình VBA trong Excel: Ø Ø Sử dụng điều khiển nhúng trực tiếp trên worksheet chẳng hạn như ListBox hoặc CommandButton; Ø Ø Sử dụng các hộp thoại thông dụng có sẵn trong Excel; Ø Ø Tạo các hộp thoại tuỳ biến (chính là việc sử dụng UserForm); Ø Ø Tuỳ biến trình đơn; Ø Ø Tuỳ biến thanh công cụ; Ø Ø Tuỳ biến phím tắt. 8.1. Điểu khiển nhúng trong Worksheet Điều khiển nhúng trong Worksheet, hay còn gọi là điều khiển ActiveX, là những điều khiển có thể chèn trực tiếp vào trong worksheet, liên kết trực tiếp với dữ liệu trong các worksheet mà không cần thêm một đoạn mã lệnh nào khác. Đương nhiên, nếu cần thì người lập trình có thể thêm các đoạn mã lệnh để xử lý các tình huống khác cho từng điều khiển. Thanh công cụ Toolbox sẽ giúp cho người dùng thực hiện thiết kế giao diệ n kiểu này. Hình IV-15: Bảng tính sử dụng điều khiển nhúng trong worksheet. Để hiển thị thanh công cụ Control Toolbox, chọn trình đơn ViewÖToolbarsÖControl Toolbox. Trên thanh công cụ này, cần chú ý đến 3 biểu tượng đầu tiên phục vụ cho quá trình thiết kế các điều khiển trong worksheet: Ø Ø Design Mode : khi biểu tượng này được hiện sáng ( ), tức là các điều khiển đang ở trong chế độ thiết kế. Ở chế độ này, người lập trình có thể chọn các điều khiển, thay đổi các thuộc tính của chúng… Khi biểu tượng này ở chế độ thông thường, tức là các điều khiển đang ở trong chế độ thực thi. Ở chế độ này, các điều khiển sẽ ở trạng thái sử dụ ng. 160 Ø Ø Properties : nhấn chuột vào biểu tượng này sẽ hiển thị cửa sổ Properties, liệt kê tất cả các thuộc tính của điều khiển được chọn. Thông qua cửa sổ này, người lập trình có thể thay đổi từng thuộc tính liên quan đến điều khiển được chọn. Ø Ø View Code : nhấn chuột vào biểu tượng này sẽ hiển thị cửa sổ mã lệnh tương ứng với điều khiển được chọn. Trên thanh công cụ Control Toolbox còn có nhiều biểu tượng khác nữa, mỗi biểu tượng tương ứng với một điều khiển. Về cơ bản, các điều khiển này tương đương với các điều khiển đã được trình bày ở phần tr ước (tham khảo mục “Các điều khiển thông dụng” trang 70). 8.1.1. Điều khiển Spin Button Spin button, , là một nút bấm gắn với một ô nào đó trong worksheet. Để tăng giá trị trong ô đó, người dùng sẽ bấm vào mũi tên lên, còn để giảm giá trị, người dùng sẽ bấm vào mũi tên xuống. Spin button thích hợp khi muốn hạn chế số liệu nhập vào nằm trong một giới hạn nào đó. Các thuộc tính cơ bản của Spin button: Thuộc tính Mô tả Name Kiểu String. Tên của điều khiển LinkedCell Kiểu String. Địa chỉ của ô sẽ liên kết trực tiếp với điều khiển Max Kiểu Integer. Giá trị lớn nhất có thể đạt được Min Kiểu Integer. Giá trị nhỏ nhất có thể đạt được SmallChange Kiểu Integer. Số gia mỗi khi người dùng nhấn vào mũi tên lên hoặc xuống Value Kiểu Integer. Giá trị hiện thời của điều khiển, cũng là giá trị sẽ hiển thị trong ô liên kết trực tiếp với điều khiển 8.1.2. Điều khiển ComboBox Combo Box, , sử dụng để người dùng lựa chọn một phần tử trong danh sách đổ xuống. Điều khiển này thường được sử dụng khi người lập trình muốn người sử dụng chỉ có thể chọn được những phần tử đã được định trước, tránh những sai sót trong quá trình nhập dữ liệu, chẳng hạn như chỉ cho phép người dùng chọn một trong các loại mác của bê tông mà chương trình hỗ trợ. Thông thường ta nên đặt Combo Box trùng lên ô mà nó liên kết. Các thuộc tính cơ bản của Combo Box: Thuộc tính Mô tả Name Kiểu String. Tên của điều khiển LinkedCell Kiểu String. Địa chỉ của ô liên kết trực tiêp với Combo Box. Giá trị của Combo Box chính là giá trị của ô được liên kết. ListFillRange Kiểu String. Địa chỉ của vùng dữ liệu cấu thành danh sách các phần tử trong Combo Box. Mỗi một hàng của vùng dữ liệu là một phần tử trong danh sách đó. ColumnCount Kiểu Integer. Số cột sẽ được hiển thị trong danh sách xổ xuống của Combo Box. Mặc định ColumnCount=1. BoundColumn Kiểu Integer. Số thứ tự cột trong vùng dữ liệu, là cột mà giá trị của cột đó sẽ được gán cho thuộc tính Value của Combo Box khi một phần tử trong Combo Box được chọn. C C H H Ư Ư Ơ Ơ N N G G I I V V : : L L Ậ Ậ P P T T R R Ì Ì N N H H T T R R Ê Ê N N M M I I C C R R O O S S O O F F T T E E X X C C E E L L 161 ColumnHeads Kiểu Boolean. Nếu bằng FALSE, không hiển thị phần tiêu đề của cột trong danh sách xổ xuống. Nếu bằng TRUE, hiển thị tiêu đề của cột trong danh sách xổ xuống, và hàng dữ liệu nằm ngay phía trên ListFillRange sẽ được lấy làm tiêu đề của cột. ColumnWidths Bề rộng của cột, tính bằng pt. Nếu có nhiều cột thì bề rộng của mỗi cột sẽ được cách nhau bằng dấu chấm phẩy (;). Ví dụ 60:80 Style Kiểu Integer. Nếu bằng 0, người dùng có thể nhập dữ liệu trực tiếp vào Combo Box hoặc chọn từ danh sách. Nếu bằng 1, người dùng chỉ có thể nhập dữ liệu bằng cách chọn từ danh sách. Text Kiểu String. Là đoạn văn bản/dữ liệu được hiển thị trong Combox. Value Kiểu Variant. Là giá trị thực tế của phần tử được chọn trong Combo Box. Giá trị của thuộc tính Value này chính là giá trị của ô được liên kết với Combo Box thông qua thuộc tính LinkedCell. TạoComboBoxcónhiềucột Ví dụ sau sẽ làm rõ ý nghĩa của các thuộc tính trên thông qua việc tạo một Combo Box có nhiều cột. Combo Box sẽ hiển thị các cấp đường thiết kế, và khi lựa chọn một cấp đường, giá trị vận tốc thiết kế tương ứng sẽ được gán cho ô. Trình tự thực hiện như sau: 1. Tạo mới Combo Box trên worksheet, di chuyển đế n vị trí thích hợp. 2. Chọn kiểu cho Combo Box bằng cách gán thuộc tính Style bằng 1, nghĩa là người dùng chỉ có thể lựa chọn từ danh sách xổ xuống. 3. Gán giá trị cho các thuộc tính LinkedCell bằng C11 là ô sẽ chứa giá trị vận tốc thiết kế được chọn. Gán giá trị ListFillRange bằng F2:G7 là vùng dữ liệu chứa bảng các giá trị cấp đường và vận tốc thiết kế. Thông thường vùng dữ liệu này sẽ được lưu trữ trong một worksheet khác hoặc một nơi mà người dùng không nhìn thấy được để tránh gây ra sự lúng túng cho người dùng. 4. Để hiển thị được nhiều cột, gán giá trị thuộc tính ColumnCount bằng 2. Do giá trị cần liên kết là giá trị vận tốc thiết kế, tức là giá trị nằm ở cột thứ 2 của vùng dữ liệu, do vậy cần phải gán thuộc tính BoundColumn bằng 2. 5. Để hiển thị tiêu đề cho danh sách xổ xuống, gán giá trị ColumnHeads bằng TRUE. Hình IV-16: Combo Box có nhiều cột. 8.1.3. Điều khiển Command Button 162 Điều khiển Command Button, , thường được sử dụng khi cần người dùng thực hiện một quyết định nào đó thông qua việc kích chuột vào nút lệnh hoặc nhấn Enter tại nút lệnh. Chi tiết về các thuộc tính của điều khiển này có trong phần làm việc với Userform và các điều khiển ở phần trước. Để cài đặt mã lệnh tương ứng khi người dùng kích chuột vào nút lệnh, sử dụng sự kiện Click có trong đi ều khiển Command Button. Các bước thực hiện như sau: 1. Khởi động VBAIDE bằng cách nhấn phím ALT+F11. 2. Trong cửa sổ Project, kích đúp chuột vào worksheet có chứa điều khiển Command Button để hiển thị cửa sổ mã lệnh của worksheet đó. 3. Trong danh sách xổ xuống General ở góc trên bên trái, chọn điều khiển có tên cần thêm sự kiện, tên này chính là giá trị của thuộc tính Name mà ta đã gán cho điều khiển đó. 4. Trong danh sách x ổ xuống Declarations ở góc trên bên phải, chọn sự kiện cần cài đặt mã lệnh. 5. VBAIDE sẽ tự động chèn đoạn mã lệnh khởi tạo cho sự kiện. Gõ đoạn mã lệnh cần chèn vào vị trí con trỏ đang hoạt động. Hình IV-17: Các bước thêm sự kiện cho điều khiển Command Button. Đoạn mã lệnh sau sẽ làm hiển thị hộp thông báo khi người dùng kích chuột vào CommandButton1: Private Sub CommandButton1_Click() MsgBox "Ban vua nhan vao nut lenh nay" End Sub 8.2. Các hộp thoại thông dụng Hộp thoại là một trong những thành phần hay dùng đến nhất khi thiết kế giao diện, do đó, ngoài việc sử dụng những điều khiển để thiết kế hộp thoại trên Userform đã được đề cập ở phần trước, hoặc sử dụng chính những hộp thoại đơn giản của VB như hàm InputBox hoặc MsgBox thì người dùng có thể sử dụng những hộp thoại được Excel cung cấp và ta sẽ thấy rằng trong nhiều trường hợp, những hộp thoại này rất tiện dụng. Dưới đây là một số hộp thoại đặc trưng trong Excel. GỢI Ý Tham khảo mục “Các hộp thoại thông dụng” trang 77 để biết thêm chi tiết về các hộp thoại cơ bản thường được sử dụng. 8.2.1. Hộp thoại InputBox của Excel – Hàm InputBox Sử dụng hộp thoại InputBox (thay vì sử dụng hộp thoại InputBox) có nhiều ưu điểm: Ø Ø Định được kiểu dữ liệu trả về; . điều khiển này có trong phần làm việc với Userform và các điều khiển ở phần trước. Để cài đặt mã lệnh tương ứng khi người dùng kích chuột vào nút lệnh, sử dụng sự kiện Click có trong đi ều khiển. 159 và hiệu quả. Với định hướng thiết kế giao diện như vậy, ta nên sử dụng hệ thống trình đơn, thanh công cụ và chính bảng tính làm giao diện chính cho ứng dụng của mình. Như vậy trong Excel, . xlColumnClustered End Sub 7.6. Sử dụng các hàm có sẵn trong Excel Người lập trình có thể tận dụng các hàm có sẵn của Excel trong khi lập trình trên VBA thông qua đối tượng WorksheetFunction. Đối