Tìm hiểu về ý nghĩa và cách dùng các sự kiện trong VBA Excel

Đã bao giờ bạn tự hỏi làm thế nào để khi nháy đúp (double click) chuột thì sẽ hiện lên 1 bảng nhập dữ liệu (userform)? Hay làm thế nào mà chỉ thay đổi điều kiện lập báo cáo là toàn bộ kết quả của báo cáo sẽ thay đổi dù báo cáo đó không chứa công thức? Đó chính xác là những gì mà chúng ta đang nói tới: Các sự kiện của Worksheet trong VBA Excel. Vậy các sự kiện này có ý nghĩa gì, dùng như thế nào, có bao nhiêu loại sự kiện trong VBA? Hãy cùng Học Excel Online tìm hiểu nhé:

1. Các loại sự kiện trong VBA Excel

Trong VBA có 2 loại sự kiện chính:

  • Sự kiện cho Workbook: Là các sự kiện liên quan tới workbook hay còn gọi là 1 file excel: khi chọn 1 file excel, khi mở 1 file, hoặc khi đóng, khi lưu 1 file… Đối tượng trong nhóm sự kiện này rất nhiều và đa dạng.

  • Sự kiện cho Worksheet: Là các sự kiện liên quan tới các WorkSheet trong 1 workbook. Sự kiện dành cho WorkSheet ít hơn so với Workbook, chủ yếu gắn liền với việc có sự thay đổi trong việc chọn lựa, tính toán, cập nhật dữ liệu trong sheet.

Ngoài ra còn 1 loại sự kiện nữa là sự kiện trong UserForm, nội dung này sẽ được trình bày trong bài viết khác.

2. Ý nghĩa của các sự kiện

Bởi có rất nhiều sự kiện nên chúng ta sẽ tìm hiểu thông qua một vài sự kiện hay sử dụng và từ đó các bạn sẽ áp dụng cho các sự kiện khác:

a. Sự kiện cho Workbook

Các sự kiện độc lập:

  • Active là hoạt động, kích hoạt. Tức là khi workbook đó được chọn, được kích hoạt thì sẽ có điều gì xảy ra
  • Deactive là khi không được kích hoạt
  • Open là khi workbook đó được mở thì có thể xảy ra điều gì, ví dụ như ẩn 1 số Sheet nào đó, hay hiện lên 1 thông báo bằng Userform

Các sự kiện gắn với Before

Là trước khi hoàn thành 1 việc gì đó, trước khi thực hiện một sự kiện gì đó thì sẽ thực hiện câu lệnh macro trước, rồi sau đó mới đến lượt sự kiện đó được thực thi. Macro sẽ phải hoàn thành trước rồi mới thực hiện sự kiện đó.

  • BeforeClose: trước khi workbook được đóng lại thì có thể làm gì? ví dụ như xóa một nội dung, tính toán lại 1 bảng tính, cập nhật báo cáo… sau đó mới thực hiện đóng workbook
  • BeforePrint: trước khi thực hiện việc in thì sẽ phải hoàn tất một thủ tục gì đó, ví dụ như kẻ khung, định dạng, thêm bớt nội dung, ẩn/hiện một số dòng, cột trong 1 sheet… rồi mới đến thực hiện lệnh in

Các sự kiện gắn với After

Là sau khi hoàn thành 1 sự kiện thì lập tức thực hiện tiếp một số câu lệnh. Macro sẽ thực hiện sau khi sự kiện đó hoàn thành. Mặc dù kết quả đều gần giống với sự kiện Before nhưng thứ tự thực hiện là khác nhau, nên có thể dẫn tới việc kết quả đưa ra có chính xác hay không.

  • AfterSave: Sau khi workbook được lưu
  • AfterXMLImport: Sau khi nạp dữ liệu từ 1 file XML vào workbook

Các sự kiện liên quan tới Sheet trong Workbook

Là khi một trong số các Sheet trong Workbook được tác động: Bị xóa, bị đổi tên, bị di chuyển, click chuột trái, click chuột phải… thì sẽ có thể chạy ra 1 câu lệnh macro

Các sự kiện liên quan tới Window – cửa sổ làm việc của Excel

Khi cửa sổ làm việc của excel diễn ra một sự kiện nào đó, như thay đổi kích thước (resize), được kích hoạt (active), không được kích hoạt (deactive)… thì chúng ta có thể gắn vào đó một số câu lệnh. Ví dụ như khi cửa sổ làm việc của Excel bị thay đổi kích thước thì chúng ta cũng đồng thời thay đổi kích thước của 1 Userform chẳng hạn.

b. Sự kiện cho Worksheet

Tương tự với các sự kiện của Workbook, trong Worksheet cũng có các sự kiện độc lập, sự kiện gắn với Before. Ngoài ra còn có các sự kiện đặc trưng cho đối tượng Pivot table, Table.

Mỗi khi chúng ta tác động tới một đối tượng cụ thể, một vùng cụ thể trong Sheet bằng một sự kiện: thay đổi dữ liệu, thay đổi vị trí chọn, click chuột phải, nháy đúp chuột… thì đều có thể gắn với 1 lệnh macro để thực hiện một điều gì đó.

Nếu tại Worksheet thì chúng ta cần phải chọn cụ thể là worksheet nào. Khi đó tại đúng Sheet đã được thiết lập sự kiện mới có thể khiến macro trong sự kiện đó hoạt động.

3. Cách tạo 1 sự kiện trong VBA

Rất đơn giản, chúng ta chỉ cần chọn nơi mà chúng ta muốn bắt sự kiện: tại workbook hay tại worksheet. Nếu tại Worksheet thì cần cụ thể là Worksheet nào.

Khi chọn nơi bắt sự kiện, phần bảng viết code sẽ có 2 mục: Đối tượng nào và sự kiện nào.

  • Đối tượng nào: Thường trong ThisWorkbook sẽ chọn Workbook, trong Sheet sẽ chọn Worksheet
  • Sự kiện nào: tùy theo mục đích mà chúng ta sẽ chọn sự kiện phù hợp với đối tượng được chọn. Hầu hết các sự kiện có thể xảy ra đều được liệt kê đầy đủ, có sẵn để cho chúng ta chọn.

Khi chọn 1 sự kiện thì sẽ ra một câu lệnh đặ trong Private Sub:

Private Sub là 1 thủ tục chạy ngầm, không gọi trực tiếp như Sub thông thường.

Khi chọn sự kiện trong Worksheet thì ban đầu sẽ tự động mặc định là sự kiện SelectionChange (thay đổi đối tượng được chọn). Muốn thay đổi sang sự kiện khác thì chúng ta sẽ chọn lại sự kiện trong mục Sự kiện nào

Các câu lệnh macro cần thực hiện khi sự kiện diễn ra (khi bắt được sự kiện) phải được đặt trong cấu trúc của sự kiện đó (nằm trong Private Sub – End Sub)

Các bạn có thể tham khảo một số sự kiện sau:

Tự động xác định kết quả tìm mức giá bán tối ưu bằng cách sử dụng VBA

Hướng dẫn cách mở userform bằng thao tác double click VBA Excel

Để tìm hiểu thêm nhiều kiến thức về VBA, mời bạn tham dự khóa học VBA101 – Tự động hóa Excel với lập trình VBA. Đây là khóa học rất hữu ích dành cho bạn, giúp bạn hiểu một cách bài bản về VBA và cách sử dụng VBA, ứng dụng VBA vào công việc để tăng hiệu quả. Hãy cùng khám phá nào: