Trong suốt các thực hành VBA của mình, bạn sẽ cần phải chạy macro khi một phạm vi hoặc ô nhất định thay đổi. Trong trường hợp đó, để chạy macro khi có thay đổi đối với phạm vi mục tiêu, chúng tôi sử dụng sự kiện thay đổi.

Cú pháp sự kiện thay đổi phạm vi VBA

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("your_range")) Is Nothing Then

call your_macro

End If

End Sub

Sự kiện không hoạt động trong các mô-đun. Bạn cần viết chúng thành các đối tượng (trang tính, biểu đồ, sổ làm việc).

Lat có một ví dụ để tìm hiểu cách chạy macro khi một thay đổi được thực hiện trong một phạm vi được chỉ định.

Ví dụ: Chạy Macro VBA Khi một thay đổi được thực hiện trong phạm vi A2: A100 Đầu tiên, chúng tôi chọn trang tính mà sự kiện sẽ xảy ra. Nhấp đúp vào trang tính đó trong trình soạn thảo VBA và sao chép mã bên dưới hoặc mã chung ở trên và thực hiện các thay đổi theo yêu cầu của bạn.

image

Trong ví dụ này, tôi muốn chạy mã macro / VBA khi thay đổi được thực hiện trong phạm vi A2: A100 trên trang tính 2. Để làm như vậy, tôi nhấp đúp vào sheet2 trong trình khám phá dự án. Nó mở trang mã hóa cho trang tính đó. Bạn có thể nhấp chuột phải vào trang tính và nhấp vào mã xem để thực hiện tương tự.

Tôi cần sử dụng sự kiện thay đổi. Đối với điều đó, chúng tôi sử dụng chương trình con mặc địnhWorksheet_Change (ByVal Target As Range). Nó kích hoạt khi một thay đổi cụ thể được thực hiện. Vậy mã của chúng ta là:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A2:A100")) Is Nothing Then

Call TestEvent

End If

End Sub

Khi bạn thực hiện bất kỳ thay đổi nào trong phạm vi A2: A100 trên Sheet2, chương trình con TestEvent sẽ được gọi, như bạn có thể thấy trong gif ở trên.

TestEvent là chương trình con công khai trong module2. Nó chỉ đơn giản là bật lên một thông báo rằng Sự kiện đang hoạt động.

Sub TestEvent()

MsgBox "Event is working!"

End Sub

Nó hoạt động như thế nào?

Chúng tôi đã đặt một điều kiện:

If Not Intersect (Target, Range (“A2: A100”)) Is Nothing Then HereIntersect (Target, Range (“A2: A100”)) Is Không có gì trả về True nếu không có thay đổi nào được thực hiện trong Range A2: A100. Chúng tôi đặt một toán tử Not trước câu lệnh này đảo ngược đầu ra được đưa ra bởi “Intersect (Target, Range (” A2: A100 “))”. Do đó, nếu không có thay đổi nào được thực hiện trong phạm vi A2: A100, biểu thức trả về Falls và subTestEvent không nhận được lệnh gọi. Nếu bạn thực hiện thay đổi trong bất kỳ ô nào trong phạm vi A2: A100, biểu thức sẽ trả về True và sự kiện sẽ xảy ra. Và đó là những gì đang xảy ra ở đây.

Lưu ý: Bạn có thể đặt bất kỳ chương trình con nào trong khối này. Nó có thể từ bất kỳ mô-đun nào. Nhưng nó phải là một chương trình con công khai. Bạn có thể đặt phạm vi ở bất kỳ mức độ nào. Toàn bộ trang tính là giới hạn.

Vì vậy, các bạn, đây là cách bạn có thể gọi một chương trình con hoặc chạy mã macro / VBA khi một thay đổi được thực hiện trong một phạm vi được chỉ định. Đó là một ví dụ sự kiện cơ bản. Sự kiện này sẽ chỉ kích hoạt khi thay đổi dựa trên văn bản. Dựa trên văn bản, ý tôi là nếu bạn viết bất kỳ thứ gì vào ô hoặc xóa, sự kiện sẽ kích hoạt. Nếu bạn thay đổi định dạng của các ô, nó sẽ không kích hoạt. Có những phương pháp khác để làm điều đó.

Tôi hy vọng nó là hữu ích. Nếu bạn có bất kỳ câu hỏi nào liên quan đến chủ đề VBA này hoặc bất kỳ chủ đề nào khác liên quan đến excel, hãy cho tôi biết phần nhận xét bên dưới. Và kiểm tra các bài viết liên quan và phổ biến khác của chúng tôi được đề cập 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.