Sự kiện trong VBA: Cách xử lý và xem danh sách sự kiện
Trong bài này chúng ta sẽ tìm hiểu cách xử lý sự kiện trong VBA. Qua bài này bạn sẽ hiểu được khái niệm sự kiện (event) là gì? Cách hoạt động ra sao? Cách xem danh sách event của một đối tượng, cũng như cách tạo các event đó.
Lập trình hướng sự kiện là một khái niệm quan trọng trong lập trình ứng dụng, nhờ nó mà ta biết được hành động của người dùng tác động lên một đối tượng. Ví dụ khi người dùng click một lần thì ta bắt được sự kiện click, khi họ nhấp chuột hai lần thì ta bắt được sự kiện double click.
Nếu bạn chưa từng học lập trình thì nghe có vẻ mới lạ. Tuy nhiên, đừng lo lắng quá vì trong bài này mình sẽ giải thích thật chi tiết về xử lý sự kiện event trong VBA.
1. Event (sự kiện) là gì?
Trong VBA, sự kiện là một hành động được tác động lên một đối tượng cụ thể, để từ đó ứng dụng VBA có thể biết được hành động của người dùng mà xử lý theo đúng yêu cầu của họ. Sự kiện đóng vai trò rất quan trọng, nó giúp máy tính và con người có thể trao đổi thông tin với nhau thông qua những hành động.
Bài viết này được đăng tại [free tuts .net]
Ví dụ khi bạn tắt một workbook thì sự kiện Before Close được kích hoạt. Khi bạn click vào một command button thì sự kiện click được kích hoạt. Khi bạn chọn một giá trị trong thẻ select thì sự kiện change được kích hoạt.
Trong VBA ta dễ dàng xem được danh sách các sự kiện trong Visual Basic Editor, và cách xem như thế nào thì chúng ta sẽ tìm hiểu ở phần 2 nhé.
2. Xem danh sách sự kiện của một đối tượng VBA
Mỗi đối tượng sẽ có một số sự kiện khác nhau. Ví dụ với đối tượng command button không có sự kiện change, nhưng đối tượng combobox thì có. Mình sẽ có một bài khác nói chi tiết hơn về sự kiện của từng đối tượng.
Bước 1: Xác định tên của đối tượng
Trước tiên bạn hãy tạo cho mình một số đối tượng ActiveX Control như sau.
- Một Command Button
- Một ComboBox
- Một ListBox
Để xem thông tin chi tiết của từng đối tượng thì bạn hãy click chuột phải và chọn Properties. Như trong hình dưới đây là mình đang xem cho đối tượng Command Button.
Một hộp thoại xuất hiện, bạn hãy chú ý đến tên của đối tượng nằm trong vùng mình khoanh tròn nhé.
Tên này bạn có thể thay đổi tùy ý. Tuy nhiên, lời khuyên là bạn nên thay đổi ngay lúc tạo ra nó, chứ để sau này khi bạn đã viết quá nhiều sự kiện trên đó rồi thì rất khó chỉnh sửa.
Chốt hạ, dưới đây là tên của ba đối tượng:
- CommandButton1
- ComboBox1
- ListBox1
Bước 2: Xem danh sách sự kiện ở Visual Basic Editor
Bây giờ bạn hãy mở Visual Basic Editor lên nhé.
1. Vì 3 đối tượng trên mình tạo trong Sheet1 nên bạn hãy mở module Sheet1 lên bằng cách nhấn double 2 lần nhé.
2. Một hộp thoại nhập code cho Sheet1 hiện ra, tại đây bạn cần chú ý đến hai vị trí.
- Vị trí số 1 là nơi bạn chọn đối tượng đang có trong Sheet1.
- Vị trí số 2 là bạn chọn sự kiện cần định nghĩa cho đối tượng mà bạn đã chọn ở số 1.
Danh sách đối tượng
Danh sách sự kiện
3. Hình ảnh dưới đây mình chọn đối tượng ComboBox1 và sự kiện Change, lúc này VBA đã tạo cho bạn một Private Sub tên là ComboBox1_Change
, đây chính là hàm sẽ chạy khi sự kiện change xảy ra trên ComboBox1.
3. Quy tắc đặt tên Sub cho sự kiện trong VBA
Nếu bạn để ý kỹ thì sẽ thấy có một quy tắc đặt tên Sub cho các sự kiện, đó là:
Tên sẽ được ráp theo côgn thức như sau:
{Object_name}_{Event}
Trong đó:
- Object_name là tên đối tượng
- Event là tên của sự kiện
Như kết quả ở phần 2 ta có:
- Tên của đối tượng là ComboBox1
- Tên của sự kiện là Change
=> Vậy tên của Sub sẽ là: ComboBox1_Change.
Đây chính là câu trả lời cho vấn đề không nên đổi tên của đối tượng khi bạn đã viết quá nhiều sự kiện trên đó. Nếu bạn đổi tên đối tượng thì đồng nghĩa phải đổi lại tên tất cả các Sub Event đã tạo.
4. Ví dụ về xử lý sự kiện trong VBA
Mình sẽ lấy một ví dụ rất đơn giản như sau.
Hãy viết một đoạn code VBA bắt sự kiện khi tạo một sheet mới thì hiển thị câu chào "Bạn đã tạo Sheet thành công!".
1. Theo phân cấp đối tượng mà bạn đã học trong bài Workbook và Worksheet thì tất cả các sheet đều là con của workbook, vì vậy để bắt sự kiện tạo sheet thì ta phải tìm nó ở đối tượng Workbook.
Điều này có nghĩa là bạn sẽ phải viết nó ở Module ThisWorkBook. Hãy nhấn double chuột để mở nó lên nhé.
2. Tiếp theo bạn hãy chọn đối tượng Workbook va sự kiện New Sheet. Lúc này một Sub tự động tạo ra.
Hãy nhập thông báo lời chào sau vào trong Sub đó.
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "Ban da tao sheet " & Sh.Name & " thanh cong" End Sub
Lưu lại, sau đó ra ngoài giao diện Excel và thử tạo một sheet mới thì bạn nhận được thông báo như sau.
Như vậy là mình đã hướng dẫn xong cách xử lý sự kiện trong VBA. Qua bài này bạn đã biết cách xem danh sách sự kiện của một đối tượng, hiểu được quy tắt đặt tên sự kiện, cũng như cách tạo một chương trình bắt sự kiện đơn giản. Chúc bạn thành công!