Bạn có thể muốn chạy đoạn mã macro / VBA của mình khi một ô thay đổi giá trị của nó, khi nhấp đúp xảy ra, khi một trang tính được chọn, v.v. Trong tất cả các trường hợp này, chúng tôi sử dụng Trình xử lý sự kiện trang tính. Trình xử lý sự kiện giúp chúng tôi chạy mã VBA bất cứ khi nào một sự kiện nhất định xảy ra.

Trong bài viết này, chúng ta sẽ tìm hiểu sơ qua về từng Trình xử lý sự kiện Worksheet.

Trình xử lý sự kiện Worksheets là gì? Trình xử lý sự kiện trang tính là một chương trình con cục bộ cho một mô-đun trang tính.

Viết mã xử lý sự kiện bảng tính ở đâu?

image

Sự kiện trang tính chỉ được viết trong các đối tượng trang tính. Nếu bạn viết một sự kiện trang tính trong một số mô-đun hoặc mô-đun lớp, sẽ không có lỗi nhưng chúng sẽ không hoạt động.

Để viết trong đối tượng trang tính. Nhấp đúp vào nó hoặc nhấp chuột phải và nhấp vào mã xem. Vùng viết mã sẽ được hiển thị.

Làm thế nào để viết mã cho một sự kiện cụ thể trên trang tính?

Bây giờ khi bạn đang ở chế độ chỉnh sửa, trong menu thả xuống ở góc trên bên trái, bạn sẽ thấy thông tin chung. Nhấp vào menu thả xuống và chọn trang tính.

Giờ đây, trong menu thả xuống ở góc trên cùng bên phải, tất cả các sự kiện sẽ hiển thị. Chọn bất kỳ cái nào bạn cần và mã cơ bản cho sự kiện đó sẽ được viết cho bạn.

image

Mỗi sự kiện có một tên thủ tục cố định. Đây là những tên chương trình con dành riêng. Bạn không thể sử dụng chúng cho các chương trình con khác trên một trang tính. Trong một mô-đun, chúng sẽ hoạt động như một chương trình con bình thường.

Quan trọng: Mỗi chương trình con từ danh sách đó sẽ chạy trên sự kiện được chỉ định.

Một loại thủ tục sự kiện trang tính chỉ có thể được viết một lần trên một trang tính. Nếu bạn viết hai quy trình xử lý sự kiện giống nhau trên một trang tính, nó sẽ dẫn đến lỗi và không có quy trình nào được thực thi. Tất nhiên, lỗi sẽ là các chương trình con không rõ ràng.

Chúng ta hãy tìm hiểu sơ qua về từng sự kiện.

1. Sự kiện TheWorksheet_Change (ByVal Target As Range) Sự kiện này kích hoạt khi chúng tôi thực hiện bất kỳ thay đổi nào đối với trang tính chứa (loại trừ định dạng). Nếu bạn muốn làm gì đó nếu có bất kỳ thay đổi nào được thực hiện trong toàn bộ trang tính thì mã sẽ là:

Private Sub Worksheet_Change(ByVal Target As Range)

'do somehting

Msgbox "done something"

End Sub

“Mục tiêu” luôn là ô Hoạt động.

Một ví dụ khác: Bạn có thể muốn đặt ngày và giờ vào Ô B1 nếu A1 thay đổi. Trong trường hợp đó, chúng tôi sử dụng sự kiện worksheet_change. Mã sẽ giống như sau:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then

Range("B1").Value2 = Format(Now(), "hh:mm:ss")

End If

End Sub

Điều này sẽ chỉ nhắm mục tiêu đến ô A1.

Nếu bạn muốn nhắm mục tiêu một phạm vi thì hãy sử dụng ví dụ dưới đây:

2. TheWorksheet_SelectionChange (ByVal Target As Range) * Sự kiện Như tên cho thấy, sự kiện này kích hoạt khi lựa chọn thay đổi. Nói cách khác, nếu con trỏ của bạn nằm trong Ô A1 và nó di chuyển đến một số ô khác, thì mã trong chương trình con này sẽ chạy.

Đoạn mã dưới đây sẽ thay đổi màu ô hiện hoạt nếu nó thay đổi bất cứ khi nào và nếu nó là một hàng chẵn.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Row Mod 2 = 0 Then

Target.Interior.ColorIndex = 22

End If

End Sub

Bây giờ, bất cứ khi nào con trỏ của tôi di chuyển trên hàng chẵn, nó sẽ được tô màu. Các ô hàng lẻ sẽ bị loại bỏ.

image

Một ví dụ khác về sự kiện Worksheet_SelectionChange:

3. Sự kiện Worksheet_Activate () Sự kiện này được kích hoạt khi mã sự kiện chứa trang tính kích hoạt.

Mã bộ xương cho sự kiện này là:

Private Sub Worksheet_Activate()

End Sub

Một ví dụ đơn giản là hiển thị tên trang tính khi nó được chọn.

Private Sub Worksheet_Activate()

MsgBox "You are on " & ActiveSheet.Name

End Sub

Ngay sau khi bạn đến trang tính có chứa mã này, sự kiện sẽ chạy và sẽ hiển thị thông báo “Bạn đang ở trên trang tính tên”

(sheet2 là trong trường hợp của tôi).

4. Sự kiện Worksheet_Deactivate () Sự kiện này kích hoạt khi rời khỏi trang chứa mã. Nói cách khác, nếu bạn muốn làm điều gì đó, như ẩn hàng hoặc bất cứ thứ gì khi bạn rời khỏi trang tính, hãy sử dụng sự kiện VBA này. Cú pháp là:

Private Sub Worksheet_Deactivate()

'your code

'

End Sub

Ví dụ dưới đây sự kiện Worksheet_Deativate sẽ đơn giản bật lên một thông báo rằng bạn đã rời khỏi trang tính chính, khi bạn sẽ rời khỏi trang tính này.

Private Sub Worksheet_Deactivate()

MsgBox "You Left The Master Sheet"

End Sub

image

===

5. Sự kiện Worksheet_BeforeDelete () * Sự kiện này kích hoạt khi bạn xác nhận việc xóa trang chứa sự kiện VBA. Cú pháp rất đơn giản:

Private Sub Worksheet_BeforeDelete()

End Sub

Đoạn mã dưới đây sẽ hỏi bạn xem bạn có muốn sao chép nội dung của trang tính sắp xóa hay không.

Private Sub Worksheet_BeforeDelete()

ans = MsgBox("Do you want to copy the content of this sheet to a new sheet?", vbYesNo)

If ans = True Then

'code to copy

End If

End Sub

6. TheWorksheet_BeforeDoubleClick (ByVal Target As Range, Cancel As Boolean) * Sự kiện Sự kiện này kích hoạt khi bạn nhấp đúp vào ô được nhắm mục tiêu. Cú pháp của Sự kiện bảng tính VBA này là:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

End Sub

Nếu bạn không đặt ô hoặc phạm vi mục tiêu, nó sẽ kích hoạt mỗi lần nhấp đúp vào trang tính.

Biến Cancel là một biến boolean. Nếu bạn đặt nó là True, thì hành động mặc định sẽ không xảy ra. Có nghĩa là nếu bạn nhấp đúp vào ô, nó sẽ không vào chế độ chỉnh sửa.

Đoạn mã dưới đây sẽ làm cho ô được tô màu nếu bạn nhấp đúp vào ô bất kỳ.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

Target.Interior.ColorIndex = 7

End Sub

Đoạn mã dưới đây nhắm mục tiêu đến ô A1. Nếu nó đã được tô bằng màu được chỉ định thì nó sẽ biến mất màu đó. Nó giống như một nút thích hoặc hộp kiểm.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Address = "$A$1" Then



Cancel = True

If Target.Interior.ColorIndex = 4 Then

Target.Interior.ColorIndex = xlColorIndexNone

Else

Target.Interior.ColorIndex = 4

End If



End If



End Sub

image

7. TheWorksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean) * Sự kiện Sự kiện này kích hoạt khi bạn Nhấp chuột phải vào ô được nhắm mục tiêu. Cú pháp của Sự kiện bảng tính VBA này là:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

'

'your code

'

End Sub

Đoạn mã dưới đây sẽ điền vào ô với giá trị 1 nếu bạn nhấp chuột phải vào nó.

Nó sẽ không hiển thị các tùy chọn nhấp chuột phải mặc định vì chúng tôi đã đặt Toán tử “Hủy” thành Đúng.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

Cancel = True

Target.Value = 1

End Sub

8. Sự kiện TheWorksheet_Calculate () * Nếu bạn muốn điều gì đó xảy ra khi excel tính toán một trang tính, hãy sử dụng sự kiện này. Nó sẽ kích hoạt bất cứ khi nào excel tính toán một trang tính. Cú pháp rất đơn giản:

Private Sub Worksheet_Calculate()

'

'your code

'

End Sub
'

'your code

'

End Sub

Bạn có thể đặt siêu liên kết mục tiêu nếu bạn muốn. Nếu bạn không đặt siêu liên kết đích, nó sẽ được thực thi nếu bạn nhấp vào bất kỳ siêu liên kết nào trên trang chứa mã.

Vâng thưa các bạn, đây là một số sự kiện cơ bản trên trang tính sẽ rất hữu ích nếu bạn biết về chúng. Dưới đây là một số bài viết liên quan mà bạn có thể muốn đọc.

Nếu bạn có bất kỳ nghi ngờ nào về bài viết này hoặc bất kỳ bài viết nào khác liên quan đến excel / VBA, hãy cho chúng tôi biết trong phần bình luận bên dưới.

Bài viết liên quan:

Bài viết phổ biến:

Chức năng Countif là cần thiết để chuẩn bị bảng điều khiển của bạn.