intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tự động hóa trong thiết kế cầu đường part 6

Chia sẻ: Pham Duong | Ngày: | Loại File: PDF | Số trang:0

94
lượt xem
10
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Đoạn mã trên sử dụng cách thức 2 để tham chiếu đến một ô trong worksheet. Object ở đây chính là đối tượng Worksheet, vì vậy tập đối tượng Cells là tập đối tượng chứa tất cả các ô có trong worksheet. Ô đầu tiên – ô A1 – sẽ có thứ tự là 1, các ô còn lại được đánh số từ trái sang phải và sau đó từ trên xuống dưới. Một worksheet là một vùng dữ liệu có 65536 hàng và 256 cột nên ô thức 256 là ô cuối cùng của hàng thứ nhất, ô IV1;...

Chủ đề:
Lưu

Nội dung Text: Tự động hóa trong thiết kế cầu đường part 6

  1. Đoạn mã trên sử dụng cách thức 2 để tham chiếu đến một ô trong worksheet. Object ở đây chính là đối tượng Worksheet, vì vậy tập đối tượng Cells là tập đối tượng chứa tất cả các ô có trong worksheet. Ô đầu tiên – ô A1 – sẽ có thứ tự là 1, các ô còn lại được đánh số từ trái sang phải và sau đó từ trên xuống dưới. Một worksheet là một vùng dữ liệu có 65536 hàng và 256 cột nên ô thức 256 là ô cuối cùng của hàng thứ nhất, ô IV1; còn ô thứ 257 sẽ là ô đầu tiên của hàng thứ 2, ô A2. Xét đoạn mã thứ 3: Worksheets("Sheet1").Cells.Clear Đoạn mã trên sử dụng cách thứ 3 để tham chiếu đến các ô. Theo đó, tất cả các ô đều được tham chiếu và sẽ đều được xử lý giống nhau. Ngoài ra, người lập trình còn có thể tham chiếu đến từng ô trong tập đối tượng Cells bằng cách thực hiện câu lệnh lặp For Each… Next. Ví dụ sau sẽ thực hiện tính tổng tất cả các ô nằm trong vùng dữ liệu được tham chiếu: Sub VD_Cells() Dim myCell As Range Dim Tong As Double Tong = 0 For Each myCell In Worksheets("Sheet1").Range("A2.C4").Cells Tong = Tong + myCell.Value ‘ Tính tổng Next myCell MsgBox Tong ‘ Hiển thị kết quả End Sub 6. Sự kiện của các đối tượng trong Excel Khi người dùng thực hiện một thao tác nào đó trong chương trình, Excel sẽ làm sinh một sự kiện tương ứng với các thao tác đó, chẳng hạn như các sự kiện khi mở hoặc lưu workbook. Nhờ có các sự kiện mà người lập trình có thể viết mã lệnh để thực hiện một số thao tác mỗi khi sự kiện đó xảy ra (còn gọi là bộ xử lý sự kiện – event handler). Những hộp thông báo như “Would you like to save changes?” khi ta đóng bảng tính mà chưa lưu dữ liệu là minh hoạ rõ nhất việc sử dụng các sự kiện trong Excel. Thực chất, mỗi bộ xử lý sự kiện là một chương trình con dạng thủ tục. Khi sự kiện xảy ra, chương trình con tương ứng sẽ được tự động thực thi. Excel có khả năng giám sát nhiều loại sự kiện khác nhau. Các sự kiện có thể được phân loại như sau: Sự kiện của Workbook (sự kiện mức Workbook): các sự kiện xảy ra trong một workbook nào đó. Chẳng hạn như các sự kiện Open (khi mở hoặc tạo workbook), BeforeSave (trước khi lưu workbook), NewSheet (một sheet mới vừa được thêm),… Sự kiện của Worksheet (sự kiện mức Worksheet): các sự kiện xảy ra trong một worksheet nào đó. Ví dụ như các sự kiện Change (khi một ô trong sheet bị thay đổi), SelectionChange (người dùng chuyển sang vùng được chọn khác), Calculate (khi một worksheet được tính toán lại),… Sự kiện của đối tượng Chart: các sự kiện xảy ra trên một đối tượng chart nào đó. Chẳng hạn như các sự kiện Select (khi một đối tượng Chart được chọn), sự kiện SeriesChange (khi có một giá trị nào đó trong chuỗi số liệu bị thay đổi). Sự kiện của ứng dụng Excel (sự kiện mức ứng dụng): các sự kiện xảy ra bên trong chương trình Excel. Các sự kiện này bao gồm NewWorkbook (khi một workbook mới được tạo), WorkbookBeforeClose (trước khi đóng một workbook nào đó), SheetChange (khi một ô nào đó trong workbook bị thay đổi). 138
  2. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  Các sự kiện trong UserForm: là các sự kiện xảy ra trong UserForm hoặc trong một đối tượng nằm trên UserForm. Ví dụ như UserForm có sự kiện Initialize (xảy ra trước khi UserForm được hiển thị), hoặc đối tượng CommandButton trên UserForm có sự kiện Click (xảy ra khi người dùng kích chuột vào nút lệnh). Các sự kiện không gắn với đối tượng: nhóm sự kiện này có hai sự kiện rất hữu dụng: sự kiện OnTime và sự kiện OnKey. Những sự kiện này có cách thức hoạt động không giống như những sự kiện khác. Có một số thao tác trong Excel có thể làm xảy ra nhiều sự kiện khác nhau. Ví dụ như khi người dùng chèn một worksheet mới vào trong workbook sẽ làm phát sinh các sự kiện ở mức ứng dụng như sau: Sự kiện WorkbookNewSheet: xảy ra khi tạo mới worksheet. Sự kiện SheetDeactivate: xảy ra khi worksheet hiện hành không còn hiện hành nữa. Sự kiện SheetActivate: xảy ra khi worksheet vừa mới được tạo được chuyển thành worksheet hiện hành. 6.1. Tạo bộ xử lý sự kiện cho một sự kiện Những người mới lập trình VBA thường không biết nơi nào để tạo bộ xử lý sự kiện, hoặc bộ xử lý sự kiện được tạo ra nhưng lại không hoạt động được. Nguyên nhân là do chương trình con chứa các bộ xử lý sự kiện không được đặt đúng vị trí. Để có thể hoạt động đúng như mong muốn, các bộ xử lý sự kiện của từng đối tượng phải được đặt trong mô-đun mã lệnh tương ứng của đối tượng đó. Ví dụ sau sẽ minh hoạ cách tạo bộ xử lý sự kiện cho sự kiện Worksheet_Change của Sheet 1 (là sự kiện phát sinh khi người dùng thay đổi giá trị của một ô nào đó trong Sheet 1). Tạo bộ xử lý sự kiện  1. Trong cửa sổ Project của VBAIDE, kích đúp chuột lên đối tượng Sheet1 để hiển thị cửa sổ mã lệnh cho đối tượng Sheet1. 2. Trong cửa sổ mã lệnh vừa hiển thị, chọn danh sách ở góc trên bên trái và chọn mục Worksheet chọn danh sách ở góc trên bên phải và chọn mục Change. 139
  3. 3. VBAIDE sẽ tự động phát sinh đoạn mã lệnh sau: Private Sub Worksheet_Change(ByVal Target As Range) End Sub Chương trình con dạng thủ tục trên chính là bộ xử lý sự kiện cho sự kiện Change của đối tượng Sheet1. Người lập trình có thể viết mã lệnh để thực hiện các thao tác cần thiết mỗi khi sự kiện xảy ra. Đoạn mã sau sẽ hiển thị hộp thoại thông báo địa chỉ của ô đã bị thay đổi nội dung: Private Sub Worksheet_Change(ByVal Target As Range) MsgBox(“Ô đã bị thay đổi: ” & Target.Address) End Sub Mỗi bộ xử lý sự kiện đều có các tham số riêng. Ý nghĩa và số lượng các tham số phụ thuộc vào từng loại sự kiện. Để hiểu rõ thêm về các tham số của mỗi sự kiện, tham khảo thêm trong tài liệu trợ giúp của VBA trong Excel. CHÚ Ý Excel còn cho phép người dùng tắt các sự kiện trong ứng dụng, khi đó, các bộ xử lý sự kiện sẽ không được thực thi mỗi khi người dùng thực hiện các thao tác tương ứng nữa. Để tắt các sự kiện, chỉ cần gán thuộc tính EnableEvents của đối tượng bằng FALSE (Application.EnableEvents=FALSE). Và ngược lại, để bật lại các sự kiện, chỉ cần gán thuộc tính bằng EnableEvents TRUE (Application.EnableEvents=TRUE) 6.2. Sự kiện trong Workbook Các sự kiện mức workbook xảy ra trong một workbook nào đó. Các bộ xử lý sự kiện của đối tượng workbook được lưu trong mô-đun mã lệnh của workbook tương ứng. Dưới đây là danh sách các sự kiện trong workbook: Sự kiện Thao tác làm phát sinh sự kiện Activate Workbook được chọn làm workbook hiện hành AddinInstall Workbook được cài đặt làm Add-In AddinUninstall Workbook bị gỡ cài đặt, không còn là Add-In nữa BeforeClose Ngay trước khi workbook bị đóng lại BeforePrint Ngay trước khi workbook được in hoặc xem trước khi in BeforeSave Ngay trước khi lưu workbook Deactivate Workbook không còn hiện hành 140
  4. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  NewSheet Một worksheet vừa được tạo trong workbook Open Mở workbook SheetActivate Một sheet nào đó được chọn làm sheet hiện hành SheetBeforeDoubleClick Người dùng kích đúp chuột trên sheet nào đó. Sự kiện này xảy ra ngay trước khi kích đúp. SheetBeforeRightClick Ngay trước khi người dùng kích phải chuột trên sheet SheetCalculate Khi trên workshet có thực hiện tính toán nào đó SheetChange Khi worksheet bị thay đổi SheetDeactivate Khi một worksheet nào đó không còn là sheet hiện hành nữa SheetSelectionChange Khi người dùng thay đổi vùng lựa chọn trên worksheet WindowActivate Khi một cửa sổ được chọn là cửa sổ hiện hành WindowDeactivate Khi một cửa sổ không còn là cửa sổ hiện hành WindowResize Khi một cửa sổ bị thay đổi kích thước Sự kiện Open  Một trong những sự kiện phổ biến nhất trong Workbook chính là sự kiện Open. Sự kiện này được kích hoạt mỗi khi workbook (hoặc add-in) được mở, và sẽ kích hoạt bộ xử lý sự kiện tương ứng có tên là Workbook_Open. Bên trong thủ tục này, người lập trình có thể thực hiện nhiều thao tác khác nhau, chẳng hạn như các thao tác phổ biến sau: Hiển thị một thông báo chào mừng Mở một workbook khác Thiết lập, tạo thanh trình đơn hoặc thanh công cụ Kích hoạt một sheet hoặc một ô nào đó Kiểm tra các điều kiện cần thiết khác. Chẳng hạn như kiểm tra xem add-in cần thiết cho hoạt động của workbook đã được cài đặt hay chưa… Khuôn mẫu của bộ xử lý sự kiện Open như sau: Private Sub Workbook_Open() ‘Mã lệnh sẽ được đặt ở đây End Sub Dưới đây là một ví dụ đơn giản của thủ tục Workbook_Open. Chương trình có sử dụng hàm Weekday của VBA để xác định một ngày trong tuần. Nếu đó là ngày thứ 6, một hộp thông báo sẽ xuất hiện, nhắc nhở người dùng thực hiện sao lưu workbook hàng tuần. Nếu không phải là thứ 6, thì sẽ không có gì xảy ra cả. Private Sub Workbook_Open() Dim strThongBao As String If Weekday(Now) = vbFriday Then strThongBao = "Hôm nay là thứ Sáu. ” strThongBao = strThongBao & "Nhớ phải sao lưu workbook hàng tuần! " MsgBox strThongBao, vbInformation End If End Sub 141
  5. Sự kiện BeforeClose  Sự kiện BeforeClose xảy ra trước khi một workbook chuẩn bị đóng. Sự kiện này thường được dùng kết hợp với sự kiện Open. Lấy ví dụ như, có thể sử dụng sự kiện Open để tạo trình đơn tuỳ biến cho workbook, sau đó sử dụng sự kiện BeforeClose để xoá trình đơn đó trước khi workbook được đóng. Và như vậy, theo cách này, workbook luôn có một trình đơn tuỳ biến mà không làm ảnh hưởng đến chương trình Excel nói chung. Khuôn mẫu của bộ xử lý sự kiện BeforeClose như sau: Private Sub Workbook_BeforeClose(Cancel As Boolean) ‘Mã lệnh sẽ được đặt ở đây End Sub Tham số Giải thích Cancel Mặc định, tham số này bằng FALSE khi xảy ra sự kiện. Nếu trong bộ xử lý sự kiện có gán giá trị cho tham số Cancel=TRUE thì Excel sẽ dừng quá trình đóng workbook lại, workbook sẽ vẫn còn được mở trong Excel. Ví dụ sau sẽ minh hoạ cách thao tác với sự kiện BeforeClose. Ví dụ này sẽ kiểm tra xem khi sự kiện BeforeClose xảy ra, workbook đã được lưu hay chưa. Nếu chưa lưu sẽ hiển thị một hộp thoại yêu cầu người dùng lựa chọn các phương án: lưu – không lưu – quay trở lại workbook (không đóng workbook nữa bằng cách gán tham số Cancel = TRUE): Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim Msg As String Dim Ans As Integer If Not (Me.Saved) Then Msg = "Bạn có muốn lưu workbook: " Msg = Msg & Me.Name & "không ?" Ans = MsgBox(Msg, vbQuestion + vbYesNoCancel) Select Case Ans Case vbYes Me.Save Case vbNo Me.Saved = True Case vbCancel Cancel = True End Select End If End Sub Trong đoạn mã trên, khi người dùng chọn Yes thì sẽ thực hiện phương thức Save có trong đối tượng workbook. Khi người dùng chọn No thì sẽ gán thuộc tính Saved của đối tượng workbook thành TRUE, điều này sẽ làm cho Excel nghĩ là workbook đã được lưu, nhưng thực chất là không thực hiện thao tác lưu workbook. Khi người dùng chọn Cancel thì tham số Cancel sẽ được gán bằng TRUE, khi đó Excel sẽ không đóng workbook lại. 6.3. Sự kiện trong Worksheet Sự kiện ở mức worksheet xảy ra bên trong một worksheet nào đó. Việc xử lý tốt các sự kiện ở mức worksheet sẽ giúp ứng dụng mở rộng hoạt động hiệu quả và chuyên nghiệp hơn. Dưới đây là một số sự kiện trong worksheet: Sự kiện Thao tác làm phát sinh sự kiện 142
  6. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  Activate Worksheet được chọn làm worksheet hiện hành BeforeDoubleClick Người dùng kích đúp chuột trên sheet. Sự kiện này xảy ra ngay trước khi kích đúp. BeforeRightClick Ngay trước khi người dùng kích phải chuột trên sheet Calculate Khi trên workshet có thực hiện tính toán nào đó Change Khi một ô nào đó trong worksheet bị thay đổi Deactivate Worksheet không còn hiện hành FollowHyperlink Người dùng kích chuột vào một siêu liên kết trong worksheet SelectionChange Khi người dùng thay đổi vùng lựa chọn trên worksheet Cần phải lưu ý là mã lệnh của các bộ xử lý sự kiện của worksheet phải được đặt trong mô-đun mã lệnh của worksheet tương ứng. Sự kiện Change  Sự kiện Change xảy ra khi có một ô nào đó trong worksheet bị thay đổi. Sự kiện này sẽ không xảy ra khi quá trình tự động tính toán của Excel làm thay đổi giá trị của ô, hoặc khi chèn một đối tượng vào trong worksheet. Khuôn mẫu của bộ xử lý sự kiện Change như sau: Private Sub Worksheet_Change(ByVal Target As Range) ‘Mã lệnh sẽ được đặt ở đây End Sub Tham số Giải thích Target Tham số kiểu Range, là ô/vùng dữ liệu bị thay đổi Khi thủ tục Worksheet_Change được thực thi (nghĩa là khi sự kiện xảy ra), thủ tục này sẽ nhận được một đối tượng kiểu Range được truyền thông qua tham số Target. Đối tượng này có thể là một ô hoặc một vùng dữ liệu đã bị thay đổi. Ví dụ sau sẽ hiển thị một hộp thông báo thể hiện địa chỉ của ô đã bị thay đổi (địa chỉ của đối tượng Target): Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox “Vùng dữ liệu “ & Target.Address & “ đã thay đổi.” End Sub Để có thể hiểu rõ hơn các loại thao tác làm phát sinh sự kiện Change của workshet, nhập đoạn mã trên vào trong mô-đun mã lệnh của worksheet. Sau khi nhập xong đoạn mã lệnh trên, quay trở lại Excel và thực hiện thay đổi worksheet bằng nhiều cách khác nhau. Mỗi khi sự kiện Change xảy ra, một hộp thông báo sẽ được hiện lên thông báo địa chỉ của vùng dữ liệu đã bị tác động. Khi thực hiện theo cách như vậy, ta có thể tình cờ phát hiện ra nhiều điều thú vị về sự kiện này. Một số thao tác làm phát sinh sự kiện, nhưng một số thao tác khác lại không như thế: Thay đổi định dạng của ô không làm phát sinh sự kiện Change như mong đợi, nhưng nếu sử dụng trình đơn Edit Clear Formats thì lại làm phát sinh sự kiện này. Thêm, hiệu chỉnh hoặc xoá chú thích của các ô không làm phát sinh sự kiện Change. Nhấn phím DEL trên bàn phím sẽ làm phát sinh sự kiện Change (mặc dù ô hiện tại đang là một ô trắng). 143
  7. Những ô bị thay đổi khi sử dụng các lệnh của Excel có thể có hoặc không làm phát sinh sự kiện này. Ví dụ, chọn trình đơn Data Form và Data Sort không làm phát sinh sự kiện. Nhưng nếu chọn trình đơn Tools Spelling và Edit Replace thì lại làm phát sinh sự kiện này. Nếu trong các chương trình con của VBA có làm thay đổi một ô nào đó thì sẽ làm phát sinh sự kiện Change. Rõ ràng, sự kiện Change khá phức tạp và có thể có tính chất khác nhau tuỳ theo từng phiên bản của Excel. Tuy nhiên, sự kiện này lại rất hữu ích, đặc biệt là những ứng dụng quan trọng, đòi hỏi cần phải có sự kiểm tra, giám sát đến giá trị của từng ô. Sự kiện Change phát sinh khi có một ô nào đó bị thay đổi, nhưng thông thường người lập trình chỉ cần quan tâm đến một vùng nào đó trong worksheet mà thôi. Ví dụ sau sẽ thực hiện giám sát một vùng dữ liệu có tên là SoLieu trong worksheet. Nếu người dùng làm thay đổi giá trị bất kỳ ô nào trong vùng này, chương trình sẽ xuất hiện thông báo cho người dùng: Private Sub Worksheet_Change(ByVal Target As Range) Dim VRange As Range Set VRange = Range("SoLieu") If Not Intersect(Target, VRange) Is Nothing Then MsgBox "Ô thay đổi nằm trong vùng dữ liệu: SoLieu." End If End Sub Ví dụ trên sử dụng biến kiểu Range có tên là VRange, thể hiện cho vùng dữ liệu cần giám sát sự thay đổi (là vùng dữ liệu có tên là SoLieu). Thủ tục này còn sử dụng hàm Intersect của VBA, là hàm tìm giao của hai vùng dữ liệu, để kiểm tra xem vùng dữ liệu Target (được truyền qua tham số của sự kiện) có nằm trong vùng dữ liệu VRange hay không. Hàm Intersect trả về giá trị Nothing có nghĩa là hai vùng dữ liệu đó không có ô nào chung nhau. Do có sử dụng toán tử Not nên biểu thúc “Not Intersect(Target, VRange) Is Nothing” sẽ trả về giá trị TRUE nếu hai vùng dữ liệu có ít nhất một ô chung nhau. Vì vậy, nếu vùng dữ liệu bị thay đổi có chung ô nào đó với vùng dữ liệu tên là SoLieu thì chương trình sẽ hiển thị hộp thông báo. Các trường hợp khác, thủ tục sẽ tự kết thúc và không có gì xảy ra cả. 6.4. Sự kiện trong UserForm Các sự kiện trên UserForm 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 đó). Tham khảo mục “Làm việc với UserForm và các thành phần điều khiển” trang 61 để biết thêm chi tiết. Dưới đây là danh sách các sự kiện trong UserForm: Sự kiện Xảy ra khi… Activate UserForm được chọn là hiện hành. Click Người dùng kích chuột vào UserForm. DblClick Người dùng kích đúp chuột vào UserForm. Deactivate UserForm không còn là cửa sổ hiện hành. Initialize UserForm được tạo ra. KeyDown Người dùng nhấn một phím (nhưng chưa thả ra). KeyPress Người dùng nhấn và thả một phím. KeyUp Người dùng thả một phím (sau khi đã nhấn xuống). 144
  8. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  Layout Thay đổi kích thước hoặc vị trí của UserForm. MouseDown Người dùng kích chuột (nhưng chưa thả nút chuột). MouseMove Chuột được di chuyển trên UserForm. MouseUp Người dùng thả một nút chuột (sau khi đã kích chuột). QueryClose Trước khi UserForm bị đóng. Resize Thay đổi kích thước của UserForm. Terminate UserForm bị huỷ (UnLoad). 6.5. Sự kiện không gắn với đối tượng Các sự kiện đã được đề cập đều được gắn với một đối tượng nào đó. Phần này sẽ giới thiệu một sự kiện không gắn với đối tượng nào cả rất hay dùng, đó là sự kiện và “OnKey”. Sự kiện này sẽ được truy cập thông qua đối tượng Application. Sự kiện OnKey  Trong khi người dùng đang làm việc trên bảng tính, Excel luôn giám sát những gì người dùng gõ vào từ bàn phím. Vì vậy, người lập trình có thể thiết lập phím tắt (hoặc tổ hợp phím tắt) để khi người dùng nhấn phím tắt thì sẽ tự động thực thi một thủ tục mong muốn. Để cài đặt cho sự kiện OnKey, sử dụng phương thức OnKey có trong đối tượng Application. Cú pháp của phương thức này như sau: expression.OnKey Key, Procedure Tham số Giải thích expression Biểu thức trả về đối tượng kiểu Application Key Chuỗi ký tự đại diện cho phím hoặc tổ hợp phím được nhấn Procedure Tham số tuỳ chọn kiểu Variant, là chuỗi ký tự chứa tên của thủ tục sẽ được thực thi khi người dùng nhấn phím. Nếu giá trị của tham số này là “” (chuỗi rỗng) thì sẽ không có gì xảy ra khi người dùng nhấn phím cả. Nếu tham số Procedure được bỏ qua, thì phím tương ứng với tham số Key sẽ được thiết lập lại giá trị mặc định của Excel, tất cả các thủ tục đã được gán cho phím đó sẽ không còn hiệu lực nữa. Cần lưu ý là, tham số Key có thể là môt phím hoặc một tổ hợp phím kết hợp với các phím ALT, CTRL hoặc SHIFT,… Mỗi phím sẽ được đại diện bằng một ký tự hoặc chuỗi ký tự, chẳng hạn như “a” đại diện cho phím a, hay “{ENTER}” đại diện cho phím ENTER. Để xác định các phím không hiển thị trên màn hình khi người dùng nhấn phím tương ứng (chẳng hạn như phím TAB hoặc phím ENTER) cần phải sử dụng các giá trị đã được định nghĩa sẵn. Dưới đây là danh sách các mã phím đặc biệt đó. Mỗi mã phím tương ứng với một phím trên bàn phím. MŨI TÊN XUỐNG {DOWN} Phím Mã phím END {END} BACKSPACE {BACKSPACE} hoặc {BS} ENTER ~ (dẫu ngã) BREAK {BREAK} ENTER (phím số) {ENTER} CAPS LOCK {CAPSLOCK} ESC {ESCAPE} hoặc {ESC} CLEAR {CLEAR} F1 đến F15 {F1} đến {F15} DELETE hoặc DEL {DELETE} hoặc {DEL} HELP {HELP} 145
  9. HOME {HOME} RETURN {RETURN} MŨI TÊN PHẢI {RIGHT} SCROLL LOCK {SCROLLLOCK} Phím Mã phím TAB {TAB} INS {INSERT} MŨI TÊN LÊN {UP} MŨI TÊN TRÁI {LEFT} SHIFT + (dấu cộng) NUM LOCK {NUMLOCK} CTRL ^ (dấu mũ) PAGE DOWN {PGDN} ALT % (phần trăm) PAGE UP {PGUP} Để sử dụng tổ hợp phím, chỉ cần gán tham số Key bằng hợp của tất cả các phím đơn. Ví dụ như nếu cần gán sự kiện cho tổ hợp phím CTRL+Phím cộng, gán tham số Key= “^{+}”; hoặc với tổ hợp phím SHIFT+CTRL+Mũi tên phải, gán tham số Key= “+^{RIGHT}”. Ví dụ sau sẽ xử lý sự kiện OnKey để cài đặt lại chức năng của phím PgUp và phím PgDn. Sau khi thực thi thủ tục Setup_ConKey, nếu người dùng nhấn phím PgDn, Excel sẽ thực thi thủ tục DgDn_Sub, còn nếu người dùng nhấn phím PgUp, Excel sẽ thực thi thủ tục PgUp_Sub. Và kết quả sẽ là: khi người dùng nhấn phím PgDn sẽ di chuyển con trỏ xuống hai hàng, còn khi nhấn phím PgUp sẽ di chuyển con trỏ lên hai hàng. Sub Setup_OnKey() Application.OnKey "{PgDn}", "PgDn_Sub" Application.OnKey "{PgUp}", "PgUp_Sub" End Sub Sub PgDn_Sub() On Error Resume Next ActiveCell.Offset(2, 0).Activate End Sub Sub PgUp_Sub() On Error Resume Next ActiveCell.Offset(-2, 0).Activate End Sub Ví dụ này có sử dụng câu lệnh On Error Resume Next để bỏ qua các lỗi có thể phát sinh. Chẳng hạn như nếu ô hiện hành đang ở hàng đầu tiên, nếu cố gắng di chuyển lên trên sẽ làm phát sinh lỗi. Hoặc nếu sheet hiện hành không phải là worksheet mà là chartsheet thì cũng làm phát sinh lỗi vì không có ô hiện hành nào trên chartsheet cả. Để xoá sự kiện OnKey cho một phím nào đấy, cần phải thực thi lại phương thức OnKey mà không có tham số Procedure. Thao tác này sẽ trả về chức năng mặc định cho phím đã được gán: Sub Cancel_OnKey() Application.OnKey “{PgDn}” Application.OnKey “{PgUp}” End Sub Mặc dù bằng cách này, người lập trình có thể gán phím tắt cho một Macro bất kỳ, tuy nhiên tốt nhất là nên sử dụng trình quản lý Macro để gán phím tắt cho Macro (xem thêm mục “Quản lý Macro” trang 105) 146
  10. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  7. Các thao tác cơ bản trong Excel Phần này sẽ giới thiệu các đoạn mã thực hiện những thao tác cơ bản trong Excel. 7.1. Điều khiển Excel Các thao tác liên quan đến việc điều khiển chương trình Excel đều được thực hiện thông qua đối tượng Application, đối tượng ở cấp cao nhất trong cây phân cấp đối tượng trong Excel. 7.1.1. Thoát khỏi Excel Sử dụng phương thức có trong đối tượng Application để thoát khỏi Excel. Thông thường, nếu có workbook nào chưa được lưu, Excel sẽ hiện thị hộp thoại để nhắc người dùng lưu workbook. Tuy nhiên, người lập trình có thể thay đổi cách ứng xử trên bằng một số cách sau: Lưu tất cả các workbook trước khi thoát Gán thuộc tính Saved của workbook trước khi thoát Gán thuộc tính DisplayAlerts bằng FALSE Ví dụ sau sẽ lưu tất cả các workbook đang mở trong Excel mà không cần hiển thị thông báo cho người dùng: Sub QuitSaveAll( ) Dim wb As Workbook For Each wb In Workbooks wb.Save Next Application.Quit End Sub Ngược lại, đoạn mã sau sẽ thoát khỏi Excel mà không lưu các workbook: Sub QuitSaveNone() Dim wb As Workbook For Each wb In Workbooks ' Đánh dấu coi như các workbook đã được lưu ' nhưng thực chất, các workbook vẫn chưa được lưu wb.Saved = True Next Application.Quit End Sub Hoặc có thể sử dụng đoạn mã sau: Sub QuitSaveNone() ' Tắt tất cả các thông báo, hộp thoại Application.DisplayAlerts = False Application.Quit End Sub Cách thoát khỏi Excel sử dụng thuộc tính Saved hoặc DisplayAlerts sẽ có thể làm mất tất cả những thay đổi chưa được lưu. Vì thế cũng có thể sử dụng một cách khác, đó là sử dụng phương thức SaveWorkspace để lưu trạng thái làm việc của Excel của trước lúc thoát vào tệp .xlw, và khi mở tệp này, trạng thái làm việc của Excel tại thời điểm đó sẽ được khôi phục lại. Đoạn mã sau sẽ lưu toàn bộ trạng thái làm việc vào tệp Resume.xlw: Sub QuitWithResume() Application.SaveWorkspace "C:\Resume.xlw" 147
  11. Application.Quit End Sub 7.1.2. Khoá tương tác người dùng Trong một số trường hợp, để tránh người dùng thoát khỏi Excel khi đang thực hiện một số bước tính toán mất nhiều thời gian, cần phải giới hạn tương tác giữa người dùng và chương trình Excel. Đối tượng Application có một số phương thức/thuộc tính để thực hiện điều này: Gán thuộc tính DisplayAlerts bằng FALSE để ẩn các hộp thoại Excel khi đang thực thi mã lệnh. Gán thuộc tính Interactive bằng FALSE để người dùng hoàn toàn không thể tương tác được với Excel. Gán thuộc tính ScreenUpdating bằng FALSE để tắt quá trình cập nhật lại màn hình, làm ẩn đi những thay đổi diễn ra trong lúc thực thi mã lệnh. Những cách trên đều cần phải thực hiện ở đầu đoạn mã lệnh và phải thực hiện lại ở cuối của đoạn mã lệnh để thiết lập lại các giá trị mặc định, nếu không sẽ làm khoá hoàn toàn chương trình Excel. Ví dụ sau minh hoạ cách tạm thời khoá tương tác người dùng khi thực hiện các đoạn mã lệnh mất nhiều thời gian: Sub Khoa_nguoi_dung() Dim cel As Range ' Chuyển con trỏ chuột thành biểu tượng chờ. Application.Cursor = xlWait ' Tắt tương tác người dùng và việc cập nhật màn hình. Application.Interactive = False Application.ScreenUpdating = False ' Đoạn mã lệnh mô phỏng việc tính toán mất nhiều thời gian. For Each cel In [a1:iv999] cel.Select Next ' Khôi phục lại trạng thái ban đầu. Application.Interactive = True Application.ScreenUpdating = True Application.Cursor = xlDefault [a1].Select End Sub Một lợi điểm nữa của việc gán thuộc tính ScreenUpdating bằng FALSE là việc đoạn mã lệnh sẽ thực thi với tốc độ nhanh hơn vì Excel không cần phải cập nhật lại màn hình khi tiến hành chọn từng ô trong vùng dữ liệu từ A1:IV999. Nhưng cần lưu ý phải khôi phục lại các giá trị mặc định trước khi kết thúc mã lệnh. GỢI Ý Gán thuộc tính ScreenUpdating bằng FALSE trong khi thực khi các đoạn mã lệnh có liên quan đến việc hiển thị trên màn hình, chằng hạn như đổi màu nền cho vùng dữ liệu… , sẽ làm tăng tốc độ thực thi của mã lệnh 7.1.3. Thao tác với cửa sổ Đối tượng Application có tập đối tượng Windows cho phép mở, sắp xếp, thay đổi kích thước và đóng các cửa sổ bên trong Excel. Chẳng hạn như đoạn mã sau tạo thêm một cửa sổ mới và sau đó xếp chồng các cửa sổ bên trong workbook hiện hành: 148
  12. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  Sub OpenCascadeWindows() ActiveWindow.NewWindow Application.Windows.Arrange xlArrangeStyleCascade, True End Sub Người lập trình có thể đóng, thay đổi trạng thái của cửa sổ sử dụng các phương thức và thuộc tính có trong đối tượng Window. Ví dụ sau sẽ đóng cửa sổ đã được tạo ra ở ví dụ trước và khôi phục lại trạng thái của cửa sổ ban đầu trong Excel: Sub CloseMaximize() ActiveWindow.Close ‘Đóng cửa sổ hiện hành ActiveWindow.WindowState = xlMaximized End Sub Việc đóng cửa sổ cuối cùng của Workbook tương đương với việc đóng workbook đó. CHÚ Ý Trong cùng một workbook có thể có nhiều cửa sổ con, tất cả các cửa sổ con đó đều có nội dung giống nhau và đều là một thể hiện của workbook. Chi tiết, xem lại mục “Đối tượng Window” trang 127. Để điều khiển cửa sổ chính của Excel, sử dụng các thuộc tính WindowState và DisplayFullScreen có trong đối tượng Application. Đoạn mã sau sẽ thực hiện thay đổi trạng thái cửa sổ chính của Excel, giữa các thái thái sẽ có một thông báo: Sub ChangeExcelWindowState() Application.WindowState = xlMaximized ‘Phóng đại cửa sổ MsgBox "Trang thai phong dai" Application.WindowState = xlMinimized ‘Thu nhỏ cửa sổ MsgBox "Trang thai thu nho" Application.WindowState = xlNormal ‘Trạng thái thông thường MsgBox "Trang thai thong thuong" Application.DisplayFullScreen = True ‘Xem toàn màn hình MsgBox "Trang thai toan man hinh" Application.DisplayFullScreen = False ‘Trạng thái bình thường MsgBox "Trang thai thong thuong" End Sub 7.1.4. Khởi động Excel từ chương trình khác Thông thường, khi sử dụng VBA trong Excel, chương trình Excel đã được khởi động sẵn và người lập trình không cần quan tâm đến các thao tác để khởi động chương trình Excel. Tuy nhiên, vẫn có những lúc cần khởi động chương trình Excel từ chương trình khác, chẳng hạn như khi muốn xuất dữ liệu tính toán sang Excel chẳng hạn. Lúc đó, cần phải lập trình để khởi động Excel, hay nói theo cách đơn giản hơn, là tạo đối tượng Application chứa ứng dụng Excel. Để thực hiện được việc này, cần phải thực hiện các bước sau: 1. Tham chiếu đến với thư viện mở rộng của chương trình Excel. 2. Viết mã lệnh thực hiện việc khởi động chương trình Excel (tạo đối tượng Application của Excel). Dưới đây sẽ trình bày cách thức khởi động chương trình Excel từ VBA trong AutoCAD. Tham chiếu thư viện mở rộng của chương trình Excel  1. Khởi động chương trình AutoCAD Khởi động VBAIDE trong AutoCAD bằng cách nhấn tổ hợp phím ALT+F11. 149
  13. 2. Chọn trình đơn Tools References… để hiển thị hộp thoại References dùng để tham chiếu đến thư viện mở rộng. 3. Trong danh sách các thư viện có sẵn, chọn Microsoft Excel 11.0 Object Library Chọn OK. Như vậy là dự án VBA trong AutoCAD đã có tham chiếu đến thư viện mở rộng của Excel, nghĩa là người lập trình có thể truy cập đến mô hình đối tượng của Excel ngay từ bên trong VBA của AutoCAD Hình IV-14: Hộp thoại References trong VBAIDE của AutoCAD. CHÚ Ý Tuỳ từng phiên bản chương trình Excel đang được sử dụng mà tên của thư viện mở rộng Excel có thể khác nhau. Viết mã lệnh khởi động chương trình Excel  4. Trong VBAIDE của AutoCAD, chọn trình đơn Insert Module để tạo mới một mô-đun chuẩn. 5. Trong cửa sổ mã lệnh của mô-đun chuẩn, nhập đoạn mã lệnh dùng để khởi động chương trình Excel như sau: Sub ConnectToExcel() Dim App As Excel.Application On Error Resume Next Set App = GetObject(, "Excel.Application") ‘ Kiểm tra xem Excel đã được khởi động chưa ‘ Nếu chưa sẽ tiến hành tạo đối tượng Application If Err Then Err.Clear Set App = CreateObject("Excel.Application") If Err Then MsgBox Err.Description Exit Sub End If End If 150
  14. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  ‘Hiển thị cửa sổ chính của Excel App.Visible = True MsgBox "Now running " + App.Name + _ " version " + App.Version ‘====== Kết thúc việc khởi động chương trình Excel ====== ‘Bắt đầu thực hiện các thao tác trong Excel ‘giống như khi thực hiện trong môi trường VBA của Excel Dim WBook As Workbook, WSheet As Worksheet Set WBook = App.Workbooks.Add Set WSheet = WBook.Worksheets(1) WSheet.Range("A1") = "Vi du ket noi voi Excel" WBook.SaveAs "C:\Test.xls" WBook.Close Set WBook = Nothing Set WSheet = Nothing End Sub 6. Thực thi Macro: ConnectToExcel như trên, chương trình Excel sẽ được khởi động Tạo một Worksheet mới Lưu thành tệp có tên Test.xls nằm trong thư mục gốc của ổ đĩa Thoát khỏi chương trình Excel. C:\ 7.2. Làm việc với Workbook 7.2.1. Tạo mới, mở, lưu và đóng workbook Tạo mới workbook   Để tạo mới workbook, sử dụng phương thức Add có trong tập đối tượng Workbooks: Dim wb As Workbook Set wb = Application.Workbooks.Add Mở workbook  Để mở một workbook đã có, sử dụng phương thức Open có trong tập đối tượng Workbooks: Dim wb As Workbook Set wb = Application.Workbooks.Open("C:\MyBook.xls") Nếu tham số tên tệp chỉ có tên mà không bao gồm đường dẫn, Excel sẽ tìm tệp đó trong thư mục hiện hành. Nếu tệp không tồn tại thì sẽ làm phát sinh lỗi trong Excel. Lưu workbook  Để lưu workbook, sử dụng phương thức Save và SaveAs có trong đối tượng Workbook. Thư mục mặc định để lưu trong Excel có thể được thiết lập thông qua thuộc tính DefaultFilePath của đối tượng Application, thông thường thư mục mặc định là thư mục My Documents. Ví dụ sau sẽ lưu workbook mới tạo vào thư mục My Documents với tên là NewWorkbook.xls: ActiveWorkbook.SaveAs "NewWorkbook" Phương thức SaveAs thích hợp khi lưu workbook lần đầu tiên, hoặc khi muốn lưu workbook thành một workbook có tên khác. Còn phương thức Save sẽ lưu workbook và giữ nguyên tên hiện tại của workbook. Đóng workbook  151
  15. Để đóng workbook, sử dụng phương thức Close có trong đối tượng workbook. Phương thức này không tự động lưu workbook, nhưng khi có sự thay đổi nào đó chưa lưu, Excel sẽ hiển thị hộp thoại SaveChanges trước khi đóng workbook. Người lập trình có thể tắt hộp thoại này bằng cách truyền thêm tham số vào cho phương thức thức Close: ThisWorkbook.Close True Đoạn mã sẽ lưu tất cả các thay đổi và sau đó đóng workbook hiện hành. Để đóng mà không lưu những thay đổi của workbook, sử dụng đoạn mã sau: ThisWorkbook.Close False Để đóng tất cả các workbook, sử dụng phương thức Close có trong tập đối tượng Workbooks. Tuy nhiên phương thức này không có tham số, vì vậy hộp thoại SaveChanges sẽ xuất hiện khi có workbook nào đó chưa được lưu. Sub TestCloseAll() Workbooks.Close End Sub 7.3. Làm việc với Worksheet 7.3.1. Tạo mới, xoá và đổi tên worksheet Tạo mới worksheet  Để tạo mới Worksheet, sử dụng phương thức Add có trong tập đối tượng Worksheets hoặc tập đối tượng Sheets. Sub Tao_moi_worksheet() Dim ws1 As Worksheet Dim ws2 As Worksheet ‘Thêm một worksheet vào trước worksheet hiện hành Set ws1 = Worksheets.Add ‘Thêm một worksheet khác vào sau sheet cuối cùng của workbook Set ws2 = Sheets.Add(After:=Sheets(Sheets.Count), Type:=xlWorksheet) End Sub Do tập đối tượng Sheets bao gồm nhiều loại sheet khác nhau nên khi thêm worksheet sử dụng phương thức Add có trong tập đối tượng Sheets, cần phải xác định rõ loại sheet sẽ được thêm vào. Xoá worksheet  Để xoá worksheet, sử dụng phương thức Delete có trong đối tượng worksheet. Ví dụ sau sẽ xoá worksheet có tên là Sheet1. Sub Xoa_worksheet() Dim mySheet As Worksheet Set mySheet = Worksheets("Sheet1") Application.DisplayAlerts = False mySheet.Delete Application.DisplayAlerts = True End Sub Khi sử dụng phương thức Delete để xoá worksheet, Excel sẽ hiển thị hộp thông báo để xác nhận thao tác xoá worksheet. Vì vậy, khi đã chắc chắn xoá worksheet phải tắt hết tất cả các 152
  16. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  thông báo bằng cách gán thuộc tính DisplayAlerts bằng FALSE, và cũng nên nhớ là phải trả về các giá trị mặc định trước khi kết thúc chương trình. Đổi tên worksheet  Việc đổi tên worksheet được thực hiện một cách dễ dàng, chỉ cần thay đổi thuộc tính Name có trong đối tượng worksheet. Đoạn mã sau sẽ đổi tên Sheet2 thành MySheet: Worksheets("Sheet2").Name = "MySheet" 7.4. Làm việc với Range và Cells 7.4.1. Duyệt qua từng ô trong vùng dữ liệu Để duyệt qua từng ô trong vùng dữ liệu, sử dụng vòng lặp For Each… Next để duyệt qua từng đối tượng trong tập đối tượng Cells. Trình tự duyệt là theo số thứ tự của ô: duyệt từ trái sang phải là từ trên xuống dưới. Ví dụ sau sẽ duyệt qua từng ô trong vùng dữ liệu A1:D3, điền số vào từng ô theo thứ tự được duyệt. Thông qua ví dụ này, ta sẽ hiểu rõ hơn về trình tự duyệt các ô trong vùng dữ liệu: Sub Duyet_O() Dim myCell As Range Dim i As Integer i=0 For Each myCell In Range("A1:D3").Cells ‘Các thao tác xử lý nằm ở đây ‘Ví dụ: điền số thứ tự duyệt vào từng ô i=i+1 myCell.Value = i Next myCell End Sub 7.4.2. Duyệt qua từng ô trong vùng dữ liệu theo hàng và cột Quá trình duyệt theo hàng hoặc cột được thực hiện sử dụng vòng lặp For Each…Next trên các tập đối tượng Rows, Columns và Cells. Đối tượng thành phần trong các tập đối tượng này đều có kiểu là Range. Ví dụ sau sẽ tính tổng từng cột của vùng dữ liệu được tham chiếu và điền giá trị tổng này vào ô ở ngay phía dưới từng cột. 1. Sub Duyet_O_Theo_Cot() 2. Dim myCell As Range 3. Dim myColumn As Range 4. Dim Tong As Double 5. For Each myColumn In Range("A1:D3").Columns 6. Tong = 0 7. For Each myCell In myColumn.Cells 8. Tong = Tong + Val(myCell.Value) 9. Next myCell 10. myColumn.Cells(myColumn.Rows.Count + 1, 1) = Tong 11. Next myColumn 12. End Sub 153
  17. Dòng thứ 5 là vòng lặp cho phép duyệt qua từng cột trong vùng dữ liệu A1:D3. Mỗi cột lại là một vùng dữ liệu, vì thể lại tiếp tục duyệt qua từng ô trong vùng dữ liệu đó, điều này được thực hiện ở dòng thứ 7. Dòng thứ 10 dùng đế gán giá trị tổng tính được của mỗi ô vào ô dưới cùng của cột. 7.4.3. Vùng có chứa dữ liệu – Thuộc tính UsedRange UsedRange là một thuộc tính rất hữu dụng của đối tượng Worksheet. Thuộc tính này trả về vùng dữ liệu là hình chữ nhật bao của tất cả các ô có chứa dữ liệu. Góc trên bên trái của hình chữ nhật là ô đầu tiên có chứa dữ liệu, còn góc dưới bên phải của hình chữ nhật là ô cuối cùng có chứa dữ liệu. Các ô có chứa dữ liệu được hiểu là những ô có chứa thông tin như: giá trị, định dạng và chú thích. Hình sau minh hoạ rõ hơn về thuộc tính UsedRange. Mặc dù trong vùng dữ liệu trả về của thuộc tính UsedRange có chứa cả những ô không có dữ liệu, nhưng như vậy đã là hiệu quả và tiết kiệm thời gian hơn là so với việc duyệt qua tất cả các ô trong worksheet. Ví dụ sau sẽ duyệt qua tất cả các ô có chứa dữ liệu và chọn những ô có giá trị âm trên worksheet hiện hành: Sub Su_dung_UsedRange( ) Dim cel As Range, str As String For Each cel In ActiveSheet.UsedRange If cel.Value < 0 Then str = str & cel.Address & "," Next If str "" Then str= Left(str, Len(str) - 1) ActiveSheet.Range(str).Select End If End Sub Ví dụ trên lấy về địa chỉ của tất cả các ô có giá trị âm và sử dụng dấu “,” ngăn cách giữa địa chỉ của các ô để lấy hợp của tất cả các ô (xem thêm mục “Tham chiếu đến đối tượng Range” trang 132). Sau khi kết thúc vòng lặp, chuỗi str sẽ có kiểu là “$A$1,$D$5,” nên dòng lệnh If cuối cùng sẽ cắt ký tự cuối cùng của chuỗi str để chuyển về dạng thức địa chỉ đúng “$A$1,$D$5”. Câu lệnh Len(str) trả về chiều dài của chuỗi ký tự str. Còn câu lệnh Left(str,n) trả về n ký tự nằm ở bên trái của chuỗi ký tự str. 154
  18. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  7.5. Làm việc với biểu đồ Tính năng biểu đồ trong Excel khá ấn tượng. Một biểu đồ có thể thể hiện nhiều kiểu dữ liệu khác nhau trong Excel. Excel hỗ trợ hơn 100 loại biểu đồ khác nhau và người dùng có thể điều khiển hầu như tất cả các thành phần trong biểu đồ bởi lẽ, mỗi thành phần trong biểu đồ chính là một đối tượng với các phương thức và thuộc tính khác nhau. Vì vậy, việc lập trình với biểu đồ là không dễ, nhưng một khi đã hiểu rõ cây phân cấp đối tượng thì kết quả sẽ ấn tượng hơn rất nhiều. Tuỳ theo vị trí mà biểu đồ trong Excel được phân thành 2 loại sau: Biểu đồ nhúng – ChartObject: là dạng biểu đồ nằm bên trong một worksheet. Trong một worksheet có thể chứa nhiều biểu đồ nhúng khác nhau và các biểu đồ này có thể được truy xuất thông qua tập đối tượng ChartObjects có trong đối tượng worksheet. Biểu đồ độc lập – ChartSheet: là dạng biểu đồ nằm trong một sheet riêng biệt, gọi là chartsheet. Mỗi một chartsheet chỉ có thể chứa một biểu đồ dạng này mà thôi. Biểu đồ dạng này có thể được truy xuất thông qua tập đối tượng Charts có trong đối tượng workbook. Biểu đồ, dù là dạng nhúng hay độc lập, đều có cùng một kiểu dữ liệu là Chart. Hơn nữa, trong hầu hết các bảng tính, các biểu đồ thường được nhúng trong worksheet để tiện cho việc trình bày. Chính vì vậy, nội dung trong giáo trình này chỉ tập trung thao tác đối với biểu đồ nhúng. 7.5.1. Tạo mới biểu đồ Cách nhanh nhất để tạo biểu đồ bằng mã lệnh là sử dụng phương thức ChartWizard của đối tượng Chart. Với phương thức này, người lập trình có thể tạo được biểu đồ chỉ trong 2 bước: 1. Tạo mới đối tượng Chart, sử dụng phương thức Add. 2. Gọi phương thức ChartWizard của đối tượng Chart vừa được tạo. Phương thức ChartWizard có rất nhiều tham số khác nhau, tất cả đều là tham số tuỳ chọn. ChartWizard(Source, Gallery, Format, PlotBy, CategoryLabels, SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle) Tham số Giải thích Source Vùng dữ liệu chứa số liệu đầu vào cho biểu đồ Gallery Dạng biểu đồ, có thể là một trong những giá trị sau: xlArea, xlBar, xlColumn, xlLine, xlPie, xlRadar, xlXYScatter, xlCombination, xl3DArea, xl3DBar, xl3DColumn, xl3DLine, xl3DPie, xl3DSurface, xlDoughnut, xlDefaultAutoFormat. Format Định dạng tự động. Giá trị từ 1÷10 tuỳ thuộc vào loại biểu đồ. Nếu bỏ qua tham số này, Excel sẽ tự chọn giá trị mặc định dựa trên dạng biểu đồ và số liệu đầu vào. PlotBy Xác định xem số liệu cho từng chuỗi số liệu là theo cột hay hàng, có thể là xlRows hoặc xlColumns. CategoryLabels Số nguyên xác định số hàng hoặc cột bên trong vùng dữ liệu đầu vào sẽ làm CategoryLabels. SeriesLabels Số nguyên xác định số hàng hoặc cột bên trong vùng dữ liệu đầu vào sẽ làm SeriesLabels. HasLegend Bằng TRUE thì biểu đồ sẽ có thêm phần chú giải. 155
  19. Title Tiêu đề của biểu đồ CategoryTitle Tiêu đề của trục ngang ValueTitle Tiêu đề của trục đứng ExtraTitle Tiêu đề trục đối với biểu đồ 3D hoặc tiêu đề của trục giá trị thứ 2 của biểu đồ 2D Ví dụ sau tạo một biểu đồ trong một chartsheet nằm sau worksheet hiện hành, sau đó sử dụng phương thức ChartWizard để tạo biểu đồ dựa trên vùng dữ liệu có tên là SoLieu. Nội dung của vùng dữ liệu đó như sau: Mặt Hàng A Mặt hàng B 20.0 35.0 2000 21.0 35.5 2001 24.0 36.0 2002 25.0 37.0 2003 23.0 36.5 2004 23.5 37.0 2005 25.0 38.0 2006 Sub ChartWizard() Dim ws As Worksheet, chrt As Chart Set ws = ActiveSheet ' Tạo mới chartsheet, nằm sau worksheet hiện hành. Set chrt = Charts.Add(, ws) ' Đặt tên cho chartsheet. chrt.Name = "Bieu Do Gia" ' Tạo biểu đồ sử dụng phương thức ChartWizard. chrt.ChartWizard ws.[SoLieu], xlLine, , xlColumns, 1, 1, True, _ "Bieu Do Gia Hang Nam", "Nam", "Gia" End Sub 156
  20. CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL  7.5.2. Thêm một chuỗi số liệu vào biểu đồ đã có Các số liệu đã được vẽ trong biểu đồ được lưu trữ trong tập đối tượng SeriesCollection. Mỗi hàng hoặc cột dữ liệu được lưu trữ trong một đối tượng Series tương ứng và mỗi số liệu trong một đối tượng Series được lưu trữ trong đối tượng Point. Người lập trình có thể thêm chuỗi số liệu vào một biểu đồ đã có bằng cách gọi phương thức Add của tập đối tượng SeriesCollection. Phương thức Add có những tham số sau: Tham số Giải thích Source Vùng dữ liệu chứa dữ liệu của chuỗi số liệu mới hoặc có thể là mảng số liệu Rowcol Xác định xem chuỗi số liệu bố trí theo dạng cột hay dạng hàng, có thể là xlRows hoặc xlColumns. SeriesLabels Giá trị này sẽ bị bỏ qua nếu Source là một mảng số liệu. Nếu Source là vùng dữ liệu thì giá trị này sẽ là TRUE nếu hàng hoặc cột đầu tiên của vùng dữ liệu chứa tên của chuỗi số liệu, nếu không thì gán giá trị này bằng FALSE. CategoryLabels Giá trị này sẽ bị bỏ qua nếu Source là một mảng số liệu. Nếu Source là vùng dữ liệu thì giá trị này sẽ là TRUE nếu hàng hoặc cột đầu tiên của vùng dữ liệu chứa giá trị làm CategoryLabels của chuỗi số liệu, nếu không thì gán giá trị này bằng FALSE. Replace Nếu CategoryLabels là TRUE và Replace là TRUE, thì giá trị CategoryLabels của biểu đồ hiện tại sẽ được thay mới. Nếu Replace là FALSE thì CategoryLabels của biểu đồ hiện tại sẽ được giữ nguyên. Mặc định là giá trị FALSE. Ví dụ sau sẽ thêm một chuỗi số liệu mới vào biểu đồ đã được tạo ở ví dụ trước, và chuyển dạng biểu đồ thành dạng cột . Sub AddNewSeries() Dim chrt As Chart, sc As SeriesCollection, sr As Series ' Lấy lại biểu đồ theo tên biểu đồ. Set chrt = Charts("Bieu Do Gia") ' Lấy tập đối tượng SeriesCollection. 157
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
5=>2