Các sự kiện khi thao tác với Worksheet trong VBA

VBA hỗ trợ nhiều sự kiện cho Worksheet như có thể bắt được thao tác khi sửa/ xóa dữ liệu, khi Click chuột, chuyển Sheet, xóa Sheet… Và dựa vào các sự kiện này khi thực thi, bạn có thể lồng vào các đoạn lệnh VBA để tùy biến thêm các tác vụ cho riêng mình.

Vậy VBA hỗ trợ những sự kiện Worksheet nào và cách sử dụng ra sao, thì bạn hãy cùng mình tìm hiểu nhé.

Các sự kiện khi thao tác với WorkSheets trong VBA

💡 Trong VBA, bạn có thể xem và tạo nhanh các sự kiện bằng cách chọn Worksheet và chọn mở trong danh sách các sự kiện.

worksheet-events-vba-excel-158-1

Một số lưu ý:

  • Nếu muốn bắt sự kiện trên Sheet1 thì trong VBA bạn phải tạo sự kiện đó trong Sheet1.
  • Các sự kiện giữa các Sheet sẽ không ảnh hưởng đến nhau.

1) Worksheet_SelectionChange

Cách sử dụng:
  • Sự kiện thực thi khi thay đổi chọn Cells hoặc Range. Ví dụ khi đang ở Cells A1, bạn chuyển qua Cells A2 thì sự kiện sẽ được thực thi.
  • Sự kiện hoạt động cả khi di chuyển bằng chuột hoặc bằng phím điều hướng.
Khai báo
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Chú thích:
  • Target: biến khai báo theo kiểu Range.
  • Khi kéo chọn 1 Range, Target sẽ lấy vị trí Cell đầu tiên.
Ví dụ: Xác định vị trí của Cells thuộc hàng A khi Click chuột
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
MsgBox "Hang " & Target.Column & " Cot " & Target.Row
End If
End Sub

2) Worksheet_Activate

Cách sử dụng:
  • Sự kiện này sẽ thực thi khi bạn di chuyển giữa các Sheets của một Workbook. Ví dụ: khi đang ở Sheet1 bạn di chuyển qua Sheet2 thì sự kiện được khai báo ở Sheet2 sẽ thực thi.
Khai báo:
Private Sub Worksheet_Activate()
End Sub

3) Worksheet_Deactivate

Cách sử dụng:
  • Khác với sự kiện ở Worksheet_Activate thì sự kiện được khai báo ở Sheet1 sẽ thực thi.
Khai báo:
Private Sub Worksheet_Deactivate()
End Sub

4) Worksheet_BeforeDoubleClick

Cách sử dụng:
  • Nếu để ý, thì khi Click chuột vào 1 Cells thì sẽ phải Double Click vào Cells đó mới có thể chỉnh sửa. Vậy sự kiện này sẽ thực thi trước khi con trỏ chuột trong Cells.
  • Sự kiện sẽ không thực thi khi 1 Click vào Cells và dùng bàn phím để nhập liệu.
Khai báo:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub
Ghi chú:
  • Target: biến khai báo theo kiểu Range.
  • Cancel: biến kiểu Boolean sẽ có giá trị là TRUE/ FALSE. Giá trị là FALSE khi sự kiện thực thi.
Ví dụ: Ghi thời gian hiện tại khi Double Click vào Cells thuộc hàng A
Private Sub Worksheet_BeforedoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target.Value = "" Then
Target.Value = Now()
End If
End If
End Sub

5) Worksheet_BeforeRightClick

Cách sử dụng:
  • Sự kiện thực thi khi bạn Click chuột phải vào bảng tính.
  • Sẽ thực thi trước khi Menu Context của Excel được hiển thị.
Khai báo
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
End Sub
Ghi chú:
  • Target: biến khai báo theo kiểu Range.
  • Cancel: biến Boolean sẽ có giá trị là TRUE/ FALSE. Giá trị là FALSE khi sự kiện thực thi.

6) Worksheet_Calculate

Cách sử dụng:
  • Sự kiện thực thi khi các phép toán trên Sheet được thực hiện hoặc làm mới. Ví dụ: khi bạn thực hiện 1 phép tính cộng thì sự kiện này sẽ thực thi.
  • Chỉ thực thi khi có phép toán được thực hiện trên bảng tính.
Khai báo:
Private Sub Worksheet_Calculate()
End Sub

7) Worksheet_Change

Cách sử dụng:
  • Khi kết thúc chỉnh sửa trong bảng tính thì sự kiện này sẽ được thực thi.
  • Bao gồm cả thay đổi khi nhập văn bản và thay đổi từ kết quả của các hàm.
Khai báo:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub

8) Worksheet_BeforeDelete

Cách sử dụng:
  • Khi xóa một Sheet bạn sẽ nhận được 1 thông báo yêu cầu xác nhận. Nếu tiếp tục xóa thì sự kiện này sẽ thực thi và sau đó Sheet sẽ bị xóa hoàn toàn.
Khai báo:
Private Sub Worksheet_BeforeDelete()
End Sub

9) Worksheet_FollowHyperlink

Cách sử dụng:
  • Khi Click văn bản có gắn HyperLink thì sự hiện này sẽ thực thi.
Khai báo:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
End Sub
Ghi chú:
  • Target: biến là một Range và được gán Hyperlink

✔ Cách khóa và mở khóa các sự kiện trên Sheet

Khi nhập dữ liệu vào bảng tính bằng cách nhập hay sử dụng VBA thì nếu được khai báo, các sự kiện như Worksheet_Change, Worksheet_SelectionChange… cũng sẽ thực thi. Vì vậy nếu bạn muốn tạm thời loại bỏ các sự kiện này thì hãy sử dụng thêm cặp lệnh sau:

Khóa các sự kiện:
Application.EnableEvents = False
Mở khóa các sự kiện:
Application.EnableEvents = True
Ví dụ: Khóa và sau đó mở khóa sự kiện của Worksheet.
Sub khoa_sukien()
Application.EnableEvents = False
Sheet1.Range("A1:A1").Value = 2
Application.EnableEvents = True
End Sub

OK! Trên đây là tổng hợp các sự kiện mà VBA hỗ trợ cho Worksheet. Bạn hãy sử dụng các sự kiện này để bổ sung thêm nhiều tính năng tùy chỉnh cho bảng tính Excel của mình nhé.

Hy vọng bài tổng hợp này hữu ích với các bạn.

Chúc các bạn thành công!

BÌNH LUẬN

Please enter your comment!
Please enter your name here