Tham khảo tài liệu ''giáo trình hình thành quá trình ứng dụng các phương pháp lập trình trên microsoft access marco p3'', tài liệu phổ thông, tin học phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL Trường hợp muốn tham chiếu đến vùng liệu, người lập trình dựa địa hai ơ, góc bên trái góc đưới bên phải Ví dụ sau tham chiếu đến vùng liệu từ ô B2 đến ô C3 theo nhiều cách khác nhau: Worksheets("Sheet1").Range("B2:C3") = Worksheets("Sheet1").Range("B2.C3") = Worksheets("Sheet1").Range("B2", "C3") = ‘Cách thứ ‘Cách thứ hai ‘Cách thứ ba Hoặc thay sử dụng đối tượng Range, dùng trực tiếp dấu ngoặc vuông ([ ]) Điều tương đương với tham chiếu sử dụng đối tượng Range: Worksheets("Sheet1").[B2:C3] = Worksheets("Sheet1").[B2.C3] = ‘Cách thứ ‘Cách thứ hai Nếu muốn tham chiếu đến vùng liệu giao vùng liệu, sử dụng dấu cách vùng liệu Ví dụ sau tham chiếu đến vùng liệu giao hai vùng liệu A1:C3 B2:D4, vùng tham chiếu thực vùng B2:C3 Worksheets("Sheet1").Range("A1:C3 B2:D4") = Nếu muốn tham chiếu đến vùng liệu hợp vùng liệu khác nhau, sử dụng dấu phẩy ngăn cách vùng liệu Ví dụ sau tham chiếu đến vùng liệu hợp vùng liệu A1:B2, ô D3 vùng A4:C4 Worksheets("Sheet1").Range("A1:B2,D3,A4.D4") = Dưới phương thức thuộc tính đối tượng Range: Activate Phương thức dùng để chuyển ô thành ô hành Nếu vùng liệu nhiều có chọn làm hành, ô góc bên trái Cần lưu ý phương thức gọi thành công vùng liệu nằm worksheet hành Vì vậy, muốn 133 kích hoạt vùng liệu worksheet đó, cần phải chuyển worksheet thành worksheet hành Worksheets(“Sheet1”).Activate Range(“A3:B5”).Activate AddComment và ClearComments Phương thức AddComment cho phép thêm thích vào vùng tham chiếu Vùng liệu phép ô, ô phải chưa có thích, khơng làm phát sinh lỗi Cịn phương thức ClearComments cho phép xố tất thích vùng liệu Khác với phương thức AddComment, phương thức vùng Range("A1:C3").ClearComments Range("B2").AddComment "Chu thich moi" ‘Xố thích vùng A1:C3 ‘Thêm thích B2 Address Thuộc tính trả địa vùng liệu tham chiếu Ví dụ sau hiển thị vùng liệu đặt tên SoLieu Sheet1: MsgBox Worksheets("Sheet1").Range("SoLieu").Address BorderAround Phương thức thực vẽ đường biên xung quanh vùng liệu tham chiếu Người lập trình thiết lập kiểu đường, bề dày nét vẽ màu đường Worksheets("Sheet1").Range("A1:D4").BorderAround _ LineStyle:=xlDashDot, ColorIndex:=3, Weight:=xlThick Calculate Phương thức thực tính tốn cho vùng liệu tham chiếu, áp dụng trường hợp chế độ tính Excel thiết lập thành tính tốn thủ cơng (Manual) Cells Cells tập đối tượng tham chiếu đến tất ô nằm vùng liệu tham chiếu Chi tiết xem thêm mục “Tập đối tượng Cells” trang 137 Clear, ClearContents và ClearFormats Phương thức Clear xố tất có vùng liệu tham chiếu: nội dung, định dạng, thích… Phương thức ClearContents xố nội dung lưu trữ vùng liệu Còn phương thức ClearFormats xố định dạng vùng liệu Sau xố định dạng, có định dạng mặc định Excel Worksheets(“Sheet2”).Range(“A1:C3”).Clear Worksheets(“Sheet2”).Range(“A1:C3”).ClearContents Worksheets(“Sheet2”).Range(“A1:C3”).ClearFormats Column và Row 134 ‘Xoá tất ‘Xoá nội dung ‘Xoá định dạng CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL Hai phương thức trả số thứ tự cột hàng ô vùng liệu tham chiếu MsgBox Worksheets("Sheet1").Range("B3:D12").Column MsgBox Worksheets("Sheet1").Range("B3:D12").Row ‘Hiển thị giá trị ‘Hiển thị giá trị Columns và Rows Thuộc tính Columns Rows thực chất tập đối tượng kiểu Range chứa cột hàng nằm phạm vi vùng liệu tham chiếu Ví dụ sau sử dụng vịng lặp For Each … Next để đổi màu điền số thứ tự cột vào cột vùng liệu tham chiếu Public Sub VD_Columns() Dim myColumns As Range For Each myColumns In Range("B3:C4,E2:F6").Columns myColumns.Interior.Color = RGB(0, 255, 0) ‘Đổi màu myColumns.Value = myColumns.Column ‘Điền số cột Next myColumns End Sub thứ tự GỢI Ý Có thể sử dụng tập đối tượng Columns Rows để truy cập đến hàng hay cột worksheet Ví dụ sau điền giá trị vào tất ô cột C ô hàng 3: Worksheets("Sheet1").Columns("C") = Worksheets("Sheet1").Rows("3") = ColumnWidth và RowHeight Thuộc tính dùng để thiết lập chiều rộng cột chiều cao hàng vùng liệu tham chiếu Worksheets("Sheet2").Range("B2:C4").ColumnWidth = 15 Worksheets("Sheet2").Range("B2:C4").RowHeight = 15 Offset Hàm Offset tịnh tiến vùng liệu theo số hàng số cột xác định thông số đầu vào hàm Offset Giá trị trả hàm vùng liệu sau tịnh tiến Cấu trúc hàm Offset là: Offsett(số_hàng, số_cột) Số_hàng số dương tịnh tiến xuống dưới, số_cột số dương tịnh tiến sang phải Ví dụ sau tịnh tiến vùng liệu lên hàng sang phải cột: 135 Worksheets("Sheet1").Range("A4:B5").Offset(-2, 3).Value = Replace Phương thức dùng để thay thể chuỗi ký tự chuỗi ký tự khác Ví dụ sau thay từ SIN COS: Worksheets("Sheet2").Range("A1.C5").Replace "SIN", "COS" Phương thức có nhiều tham số khác để thiết lập chế độ tìm kiếm vào thay trật tự tìm kiếm, phân biệt chữ hoa chữ thường,… Chi tiết xem hướng dẫn kèm Excel Select Phương thức lựa chọn vùng liệu tham chiếu, giống sử dụng chuột để lựa chọn vùng liệu worksheet Cũng giống phương thức Activate, vùng liệu tham chiếu phải nằm worksheet hành, không làm phát sinh lỗi thực thi chương trình Ví dụ sau chọn vùng liệu B2:C3 worksheet hành: Range(“B2:C3”).Select Value Thuộc tính chứa giá trị vùng liệu Cần phải lưu ý đọc giá trị vùng liệu vùng liệu bắt buộc phải đơn nhất, cịn gán giá trị vùng liệu vùng liệu gồm nhiều trường hợp tất có giá trị MsgBox Range("A1").Value Range("B2:C3").Value = ‘Đọc hiển thị giá trị ô A1 ‘Gán giá trị cho vùng liệu B2:C3 GỢI Ý Trong làm việc với đối tượng Range, đối tượng tham chiếu đến vùng liệu, cần lưu ý điểm sau: ✦Việc thao tác với Excel mã lệnh không cần phải thực lựa chọn vùng liệu, nên hạn chế sử dụng phương thức Activate Select ✦Trong trường hợp bắt buộc phải sử dụng phương thức này, cần phải kích hoạt worksheet có chứa vùng liệu làm worksheet hành phương thức Activate worksheet ✦Nên sử dụng vùng liệu đặt tên, chẳng hạn nên sử dụng Range(“KetQua”) thay sử dụng Range(“D45”) Vì sử dụng Range(“D45”), người dùng chèn thêm hàng phía hàng 45 địa ô cần tham chiếu thay đổi, cần phải thay đổi mã lệnh thành Range(“D46”) Nhưng sử dụng vùng liệu có đặt tên khơng cần phải thay đổi mã lệnh 136 CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL ✦Excel cho phép lựa chọn vùng liệu rời rạc Trong sử dụng Excel, thực cách giữ phím CRTL chọn vùng liệu 5.2.6 Tập đối tượng Cells Tập đối tượng Cells tập đối tượng chứa tất ô nằm vùng tham chiếu Tập đối tượng Cells thuộc tính đối tượng worksheet thuộc tính đối tượng Range Khi truy cập thơng qua đối tượng worksheet, tập đối tượng Cells tham chiếu đến tất worksheet Khi truy cập thông qua đối tượng Range, tập đối tượng Cells tham chiếu đến ô nằm vùng liệu Thực chất, thành phần cấu thành nên tập đối tượng Cells ơ, có kiểu liệu Range nên tất phương thức thuộc tính đối tượng Range có tập đối tượng Cells Xem thêm mục “Đối tượng Range” trang 132 để biết chi tiết đối tượng Range Để tham chiếu đến thơng qua tập đối tượng Cells, sử dụng cấu trúc sau: Ø object.Cells(chỉ_số_hàng, chỉ_số_cột) Ø object.Cells(chỉ_số_ô) Ø object.Cells Object đối tượng có chứa thuộc tính Cells, đối tượng kiểu Worksheet kiểu Range Các tham số chỉ_số_hàng chỉ_số_cột số tương đối phạm vi vùng liệu tham chiếu Chỉ_số_ô số thứ tự ô tập đối tượng Cells, số thứ tự đánh số theo hàng, từ trái sang phải từ xuống Xét đoạn mã sau: Worksheets(“Sheet1”).Range("B2:E4").Cells(2, 3).Value = Đoạn mã sử dụng cách thứ để gán giá trị cho ô nằm vùng B2:E4 Object đối tượng kiểu Range, tập đối tượng Cells tập đối tượng chứa ô vùng B2:E4 Chỉ số hàng cột tính tương đối so với ô vùng liệu, ô B2 Vì vậy, Cells(1,1) vùng liệu, cịn Cells(2,3) tương ứng với D3 Xét đoạn mã thứ 2: Worksheets("Sheet1").Cells(257).Value = 137 Đoạn mã sử dụng cách thức để tham chiếu đến worksheet Object đối tượng Worksheet, tập đối tượng Cells tập đối tượng chứa tất có worksheet Ơ – A1 – có thứ tự 1, cịn lại đánh số từ trái sang phải sau từ xuống Một worksheet vùng liệu có 65536 hàng 256 cột nên ô thức 256 ô cuối hàng thứ nhất, IV1; cịn thứ 257 ô hàng thứ 2, ô A2 Xét đoạn mã thứ 3: Worksheets("Sheet1").Cells.Clear Đoạn mã sử dụng cách thứ để tham chiếu đến Theo đó, tất tham chiếu xử lý giống Ngồi ra, người lập trình cịn tham chiếu đến ô tập đối tượng Cells cách thực câu lệnh lặp For Each… Next Ví dụ sau thực tính tổng tất ô nằm vùng liệu tham chiếu: Sub VD_Cells() Dim myCell As Range Dim Tong As Double Tong = 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 End Sub Sự kiện đối tượng Excel Khi người dùng thực thao tác chương trình, Excel làm sinh kiện tương ứng với thao tác đó, chẳng hạn kiện mở lưu workbook Nhờ có kiện mà người lập trình viết mã lệnh để thực số thao tác kiện xảy (còn gọi xử lý kiện – event handler) Những hộp thông báo “Would you like to save changes?” ta đóng bảng tính mà chưa lưu liệu minh hoạ rõ việc sử dụng kiện Excel Thực chất, xử lý kiện chương trình dạng thủ tục Khi kiện xảy ra, chương trình tương ứng tự động thực thi Excel có khả giám sát nhiều loại kiện khác Các kiện phân loại sau: Ø Sự kiện Workbook (sự kiện mức Workbook): kiện xảy workbook Chẳng hạn kiện Open (khi mở tạo workbook), BeforeSave (trước lưu workbook), NewSheet (một sheet vừa thêm),… Ø Sự kiện Worksheet (sự kiện mức Worksheet): kiện xảy worksheet Ví dụ kiện Change (khi ô sheet bị thay đổi), SelectionChange (người dùng chuyển sang vùng chọn khác), Calculate (khi worksheet tính tốn lại),… Ø Sự kiện đối tượng Chart: kiện xảy đối tượng chart Chẳng hạn kiện Select (khi đối tượng Chart chọn), kiện SeriesChange (khi có giá trị chuỗi số liệu bị thay đổi) Ø Sự kiện ứng dụng Excel (sự kiện mức ứng dụng): kiện xảy bên chương trình Excel Các kiện bao gồm NewWorkbook (khi workbook tạo), WorkbookBeforeClose (trước đóng workbook đó), SheetChange (khi workbook bị thay đổi) 138 CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL Ø Các kiện UserForm: kiện xảy UserForm đối tượng nằm UserForm Ví dụ UserForm có kiện Initialize (xảy trước UserForm hiển thị), đối tượng CommandButton UserForm có kiện Click (xảy người dùng kích chuột vào nút lệnh) Ø Các kiện khơng gắn với đối tượng: nhóm kiện có hai kiện hữu dụng: kiện OnTime kiện OnKey Những kiện có cách thức hoạt động không giống kiện khác Có số thao tác Excel làm xảy nhiều kiện khác Ví dụ người dùng chèn worksheet vào workbook làm phát sinh kiện mức ứng dụng sau: Ø Sự kiện WorkbookNewSheet: xảy tạo worksheet Ø Sự kiện SheetDeactivate: xảy worksheet hành khơng cịn hành Ø Sự kiện SheetActivate: xảy worksheet vừa tạo chuyển thành worksheet hành 6.1 Tạo xử lý kiện cho kiện Những người lập trình VBA thường khơng biết nơi để tạo xử lý kiện, xử lý kiện tạo lại không hoạt động Nguyên nhân chương trình chứa xử lý kiện khơng đặt vị trí Để hoạt động mong muốn, xử lý kiện đối tượng phải đặt mô-đun mã lệnh tương ứng đối tượng Ví dụ sau minh hoạ cách tạo xử lý kiện cho kiện Worksheet_Change Sheet (là kiện phát sinh người dùng thay đổi giá trị Sheet 1) Tạo bộ xử lý sự kiện Trong cửa sổ Project 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 Trong cửa sổ mã lệnh vừa hiển thị, chọn danh sách góc bên trái chọn mục Worksheet Ư chọn danh sách góc bên phải chọn mục Change 139 VBAIDE 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 dạng thủ tục xử lý kiện cho kiện Change đối tượng Sheet1 Người lập trình viết mã lệnh để thực thao tác cần thiết kiện xảy Đoạn mã sau hiển thị hộp thoại thông báo đị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 xử lý kiện có tham số riêng Ý nghĩa số lượng tham số phụ thuộc vào loại kiện Để hiểu rõ thêm tham số kiện, tham khảo thêm tài liệu trợ giúp VBA Excel CHÚ Ý Excel cho phép người dùng tắt kiện ứng dụng, đó, xử lý kiện không thực thi người dùng thực thao tác tương ứng Để tắt kiện, cần gán thuộc tính EnableEvents đối tượng FALSE (Application.EnableEvents=FALSE) Và ngược lại, để bật lại kiện, cần gán thuộc tính EnableEvents TRUE (Application.EnableEvents=TRUE) 6.2 Sự kiện Workbook Các kiện mức workbook xảy workbook Các xử lý kiện đối tượng workbook lưu mô-đun mã lệnh workbook tương ứng Dưới danh sách kiện workbook: Sự kiện Thao tác làm phát sinh kiện Activate Workbook chọn làm workbook hành AddinInstall Workbook cài đặt làm Add-In AddinUninstall Workbook bị gỡ cài đặt, khơng cịn Add-In BeforeClose Ngay trước workbook bị đóng lại BeforePrint Ngay trước workbook in xem trước in BeforeSave Ngay trước lưu workbook Deactivate Workbook khơng cịn hành 140 CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL NewSheet Một worksheet vừa tạo workbook Open Mở workbook SheetActivate Một sheet chọn làm sheet hành SheetBeforeDoubleClick Người dùng kích đúp chuột sheet Sự kiện xảy trước kích đúp SheetBeforeRightClick Ngay trước người dùng kích phải chuột sheet SheetCalculate Khi workshet có thực tính tốn SheetChange Khi worksheet bị thay đổi SheetDeactivate Khi worksheet khơng cịn sheet hành SheetSelectionChange Khi người dùng thay đổi vùng lựa chọn worksheet WindowActivate Khi cửa sổ chọn cửa sổ hành WindowDeactivate Khi cửa sổ khơng cịn cửa sổ hành WindowResize Khi cửa sổ bị thay đổi kích thước Sự kiện Open Một kiện phổ biến Workbook kiện Open Sự kiện kích hoạt workbook (hoặc add-in) mở, kích hoạt xử lý kiện tương ứng có tên Workbook_Open Bên thủ tục này, người lập trình thực nhiều thao tác khác nhau, chẳng hạn thao tác phổ biến sau: Ø Hiển thị thông báo chào mừng Ø Mở workbook khác Ø Thiết lập, tạo trình đơn cơng cụ Ø Kích hoạt sheet Ø Kiểm tra điều kiện cần thiết khác Chẳng hạn kiểm tra xem add-in cần thiết cho hoạt động workbook cài đặt hay chưa… Khuôn mẫu xử lý kiện Open sau: Private Sub Workbook_Open() ‘Mã lệnh đặt End Sub Dưới ví dụ đơn giản thủ tục Workbook_Open Chương trình có sử dụng hàm Weekday VBA để xác định ngày tuần Nếu ngày thứ 6, hộp thông báo xuất hiện, nhắc nhở người dùng thực lưu workbook hàng tuần Nếu khơng phải thứ 6, khơng có xảy Private Sub Workbook_Open() Dim strThongBao As String If Weekday(Now) = vbFriday Then strThongBao = "Hôm thứ Sáu ” strThongBao = strThongBao & "Nhớ phải lưu workbook hàng tuần! " MsgBox strThongBao, vbInformation End If End Sub 141 Sự kiện BeforeClose Sự kiện BeforeClose xảy trước workbook chuẩn bị đóng Sự kiện thường dùng kết hợp với kiện Open Lấy ví dụ như, sử dụng kiện Open để tạo trình đơn tuỳ biến cho workbook, sau sử dụng kiện BeforeClose để xố trình đơn trước workbook đóng Và vậy, theo cách này, workbook ln có 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 xử lý kiện BeforeClose sau: Private Sub Workbook_BeforeClose(Cancel As Boolean) ‘Mã lệnh đặt End Sub Tham số Giải thích Cancel Mặc định, tham số FALSE xảy kiện Nếu xử lý kiện có gán giá trị cho tham số Cancel=TRUE Excel dừng q trình đóng workbook lại, workbook cịn mở Excel Ví dụ sau minh hoạ cách thao tác với kiện BeforeClose Ví dụ kiểm tra xem kiện BeforeClose xảy ra, workbook lưu hay chưa Nếu chưa lưu hiển thị hộp thoại yêu cầu người dùng lựa chọn phương án: lưu – không lưu – quay trở lại workbook (khơng đóng workbook 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, người dùng chọn Yes thực phương thức Save có đối tượng workbook Khi người dùng chọn No gán thuộc tính Saved đối tượng workbook thành TRUE, điều làm cho Excel nghĩ workbook lưu, thực chất không thực thao tác lưu workbook Khi người dùng chọn Cancel tham số Cancel gán TRUE, Excel khơng đóng workbook lại 6.3 Sự kiện Worksheet Sự kiện mức worksheet xảy bên worksheet Việc xử lý tốt kiện mức worksheet giúp ứng dụng mở rộng hoạt động hiệu chuyên nghiệp Dưới số kiện worksheet: Sự kiện 142 Thao tác làm phát sinh kiện CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL Activate Worksheet chọn làm worksheet hành BeforeDoubleClick Người dùng kích đúp chuột sheet Sự kiện xảy trước kích đúp BeforeRightClick Ngay trước người dùng kích phải chuột sheet Calculate Khi workshet có thực tính tốn Change Khi worksheet bị thay đổi Deactivate Worksheet khơng cịn hành FollowHyperlink Người dùng kích chuột vào siêu liên kết worksheet SelectionChange Khi người dùng thay đổi vùng lựa chọn worksheet Cần phải lưu ý mã lệnh xử lý kiện worksheet phải đặt mô-đun mã lệnh worksheet tương ứng Sự kiện Change Sự kiện Change xảy có worksheet bị thay đổi Sự kiện không xảy q trình tự động tính tốn Excel làm thay đổi giá trị ô, chèn đối tượng vào worksheet Khuôn mẫu xử lý kiện Change sau: Private Sub Worksheet_Change(ByVal Target As Range) ‘Mã lệnh đặt End Sub Tham số Giải thích Target Tham số kiểu Range, ô/vùng liệu bị thay đổi Khi thủ tục Worksheet_Change thực thi (nghĩa kiện xảy ra), thủ tục nhận đối tượng kiểu Range truyền thông qua tham số Target Đối tượng vùng liệu bị thay đổi Ví dụ sau hiển thị hộp thông báo thể địa ô bị thay đổi (địa đối tượng Target): Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox “Vùng liệu “ & Target.Address & “ thay đổi.” End Sub Để hiểu rõ loại thao tác làm phát sinh kiện Change workshet, nhập đoạn mã vào mô-đun mã lệnh worksheet Sau nhập xong đoạn mã lệnh trên, quay trở lại Excel thực thay đổi worksheet nhiều cách khác Mỗi kiện Change xảy ra, hộp thông báo lên thông báo địa vùng liệu bị tác động Khi thực theo cách vậy, ta tình cờ phát nhiều điều thú vị kiện Một số thao tác làm phát sinh kiện, số thao tác khác lại không thế: Ø Thay đổi định dạng ô không làm phát sinh kiện Change mong đợi, sử dụng trình đơn Edit Ư Clear Ư Formats lại làm phát sinh kiện Ø Thêm, hiệu chỉnh xố thích khơng làm phát sinh kiện Change Ø Nhấn phím DEL bàn phím làm phát sinh kiện Change (mặc dù ô ô trắng) 143 Ø Những ô bị thay đổi sử dụng lệnh Excel có khơng làm phát sinh kiện Ví dụ, chọn trình đơn Data Ư Form Data Ư Sort khơng làm phát sinh kiện Nhưng chọn trình đơn Tools Ö Spelling Edit Ö Replace lại làm phát sinh kiện Ø Nếu chương trình VBA có làm thay đổi làm phát sinh kiện Change Rõ ràng, kiện Change phức tạp có tính chất khác tuỳ theo phiên Excel Tuy nhiên, kiện lại hữu ích, đặc biệt ứng dụng quan trọng, đòi hỏi cần phải có kiểm tra, giám sát đến giá trị ô Sự kiện Change phát sinh có bị thay đổi, thơng thường người lập trình cần quan tâm đến vùng worksheet mà thơi Ví dụ sau thực giám sát vùng liệu có tên SoLieu worksheet Nếu người dùng làm thay đổi giá trị ô vùng này, chương trình xuất 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 vùng liệu: SoLieu." End If End Sub Ví dụ sử dụng biến kiểu Range có tên VRange, thể cho vùng liệu cần giám sát thay đổi (là vùng liệu có tên SoLieu) Thủ tục sử dụng hàm Intersect VBA, hàm tìm giao hai vùng liệu, để kiểm tra xem vùng liệu Target (được truyền qua tham số kiện) có nằm vùng liệu VRange hay khơng Hàm Intersect trả giá trị Nothing có nghĩa hai vùng liệu khơng có chung Do có sử dụng tốn tử Not nên biểu thúc “Not Intersect(Target, VRange) Is Nothing” trả giá trị TRUE hai vùng liệu có chung Vì vậy, vùng liệu bị thay đổi có chung với vùng liệu tên SoLieu chương trình hiển thị hộp thông báo Các trường hợp khác, thủ tục tự kết thúc khơng có xảy 6.4 Sự kiện UserForm Các kiện UserForm phát sinh có hoạt động xảy – thường phát sinh từ phía người dùng (sự kiện phát sinh cách gián tiếp từ trình thực phương thức đó) Tham khảo mục “Làm việc với UserForm thành phần điều khiển” trang 61 để biết thêm chi tiết Dưới danh sách kiện UserForm: Sự kiện Xảy khi… Activate UserForm chọ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 cửa sổ hành Initialize UserForm tạo KeyDown Người dùng nhấn phím (nhưng chưa thả ra) KeyPress Người dùng nhấn thả phím KeyUp Người dùng thả phím (sau nhấn xuống) 144 CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL Layout Thay đổi kích thước vị trí UserForm MouseDown Người dùng kích chuột (nhưng chưa thả nút chuột) MouseMove Chuột di chuyển UserForm MouseUp Người dùng thả nút chuột (sau kích chuột) QueryClose Trước UserForm bị đóng Resize Thay đổi kích thước UserForm Terminate UserForm bị huỷ (UnLoad) 6.5 Sự kiện không gắn với đối tượng Các kiện đề cập gắn với đối tượng Phần giới thiệu kiện không gắn với đối tượng hay dùng, kiện “OnKey” Sự kiện truy cập thông qua đối tượng Application Sự kiện OnKey Trong người dùng làm việc bảng tính, Excel ln giám sát người dùng gõ vào từ bàn phím Vì vậy, người lập trình thiết lập phím tắt (hoặc tổ hợp phím tắt) để người dùng nhấn phím tắt tự động thực thi thủ tục mong muốn Để cài đặt cho kiện OnKey, sử dụng phương thức OnKey có đối tượng Application Cú pháp phương thức sau: expression.OnKey Key, Procedure Tham số Giải thích expression Biểu thức trả đối tượng kiểu Application Key Chuỗi ký tự đại diện cho phím tổ hợp phím nhấn Procedure Tham số tuỳ chọn kiểu Variant, chuỗi ký tự chứa tên thủ tục thực thi người dùng nhấn phím Nếu giá trị tham số “” (chuỗi rỗng) khơng có xảy người dùng nhấn phím Nếu tham số Procedure bỏ qua, phím tương ứng với tham số Key thiết lập lại giá trị mặc định Excel, tất thủ tục gán cho phím khơng cịn hiệu lực Cần lưu ý là, tham số Key mơt phím tổ hợp phím kết hợp với phím ALT, CTRL SHIFT,… Mỗi phím đại diện ký tự chuỗi ký tự, chẳng hạn “a” đại diện cho phím a, hay “{ENTER}” đại diện cho phím ENTER Để xác định phím khơng hiển thị hình người dùng nhấn phím tương ứng (chẳng hạn phím TAB phím ENTER) cần phải sử dụng giá trị định nghĩa sẵn Dưới danh sách mã phím đặc biệt Mỗi mã phím tương ứng với phím bàn phím Phím Mã phím BACKSPACE {BACKSPACE} {BS} BREAK {BREAK} CAPS LOCK {CAPSLOCK} CLEAR {CLEAR} DELETE DEL {DELETE} {DEL} MŨI TÊN XUỐNG {DOWN} END {END} ENTER ~ (dẫu ngã) ENTER (phím số) {ENTER} ESC {ESCAPE} {ESC} F1 đến F15 {F1} đến {F15} HELP {HELP} 145 HOME {HOME} RETURN {RETURN} MŨI TÊN PHẢI {RIGHT} SCROLL LOCK {SCROLLLOCK} TAB {TAB} Phím Mã phím 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, cần gán tham số Key hợp tất phím đơn Ví dụ cần gán kiện cho tổ hợp phím CTRL+Phím cộng, gán tham số Key= “^{+}”; với tổ hợp phím SHIFT+CTRL+Mũi tên phải, gán tham số Key= “+^{RIGHT}” Ví dụ sau xử lý kiện OnKey để cài đặt lại chức phím PgUp phím PgDn Sau thực thi thủ tục Setup_ConKey, người dùng nhấn phím PgDn, Excel thực thi thủ tục DgDn_Sub, cịn người dùng nhấn phím PgUp, Excel thực thi thủ tục PgUp_Sub Và kết là: người dùng nhấn phím PgDn di chuyển trỏ xuống hai hàng, cịn nhấn phím PgUp di chuyển 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ụ có sử dụng câu lệnh On Error Resume Next để bỏ qua lỗi phát sinh Chẳng hạn ô hành hàng đầu tiên, cố gắng di chuyển lên làm phát sinh lỗi Hoặc sheet hành worksheet mà chartsheet làm phát sinh lỗi khơng có hành chartsheet Để xố kiện OnKey cho phím đấ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 trả chức mặc định cho phím gán: Sub Cancel_OnKey() Application.OnKey “{PgDn}” Application.OnKey “{PgUp}” End Sub Mặc dù cách này, người lập trình gán phím tắt cho Macro bất kỳ, nhiên tốt 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 CHƯƠNG IV: LẬP TRÌNH TRÊN MICROSOFT EXCEL Các thao tác Excel Phần giới thiệu đoạn mã thực thao tác 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 thực thơng qua đối tượng Application, đối tượng cấp cao phân cấp đối tượng Excel 7.1.1 Thoát khỏi Excel Sử dụng phương thức có đối tượng Application để khỏi Excel Thơng thường, có workbook chưa lưu, Excel thị hộp thoại để nhắc người dùng lưu workbook Tuy nhiên, người lập trình thay đổi cách ứng xử số cách sau: Ø Lưu tất workbook trước Ø Gán thuộc tính Saved workbook trước Ø Gán thuộc tính DisplayAlerts FALSE Ví dụ sau lưu tất workbook mở 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 thoát khỏi Excel mà không lưu workbook: Sub QuitSaveNone() Dim wb As Workbook For Each wb In Workbooks ' Đánh dấu coi workbook lưu ' thực chất, workbook chưa lưu wb.Saved = True Next Application.Quit End Sub Hoặc sử dụng đoạn mã sau: Sub QuitSaveNone() ' Tắt tất 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 DisplayAlerts làm tất thay đổi chưa lưu Vì sử dụng cách khác, sử dụng phương thức SaveWorkspace để lưu trạng thái làm việc Excel trước lúc thoát vào tệp xlw, mở tệp này, trạng thái làm việc Excel thời điểm khơi phục lại Đoạn mã sau lưu tồn trạng thái làm việc vào tệp Resume.xlw: Sub QuitWithResume() Application.SaveWorkspace "C:\Resume.xlw" 147 ... người lập trình gán phím tắt cho Macro bất kỳ, nhiên tốt 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 CHƯƠNG IV: LẬP TRÌNH TRÊN? ?MICROSOFT? ?EXCEL ... lệnh thành Range(“D46”) Nhưng sử dụng vùng liệu có đặt tên khơng cần phải thay đổi mã lệnh 136 CHƯƠNG IV: LẬP TRÌNH TRÊN? ?MICROSOFT? ?EXCEL ✦Excel cho phép lựa chọn vùng liệu rời rạc Trong sử dụng. .. Lấy ví dụ như, sử dụng kiện Open để tạo trình đơn tuỳ biến cho workbook, sau sử dụng kiện BeforeClose để xố trình đơn trước workbook đóng Và vậy, theo cách này, workbook ln có trình đơn tuỳ biến