Cách sử dụng sự kiện sổ làm việc trong VBA
Bạn có thể muốn chạy đoạn mã macro / VBA của mình khi một sổ làm việc cụ thể được chọn, một trang tính trong sổ làm việc được chọn, ô thay đổi giá trị của nó, khi nhấp đúp xảy ra, khi một trang tính được thêm vào, v.v. Trong tất cả các trường hợp này, chúng tôi sử dụng Workbook Xử lý sự kiện. 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 Workbook Event Handler.
Trình xử lý sự kiện sổ làm việc là gì? Trình xử lý sự kiện sổ làm việc là một chương trình con cục bộ cho sổ làm việc.
Các mã này chỉ hoạt động trên các thành phần của sổ làm việc. Đó là bản thân sổ làm việc, đó là trang tính và phạm vi.
Viết mã xử lý sự kiện Workbook ở đâu?
Các sự kiện sổ làm việc chỉ được viết trong đối tượng sổ làm việc. Nếu bạn viết một sự kiện sổ làm việc trong một số mô-đun bình thường, sẽ không có lỗi nhưng chúng sẽ không hoạt động.
Để viết trong đối tượng sổ làm việc. 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ể trong sổ làm việc?
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 chung. Bấm vào menu thả xuống và chọn sổ làm việc. Trong menu thả xuống ở góc trên 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.
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ắt đầu bằng workbook_. Bạn không thể sử dụng chúng cho các chương trình con khác (bạn có thể, nhưng chúng sẽ là các 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 sổ làm việc chỉ có thể được viết một lần trên một sổ làm việc. Nếu bạn viết hai thủ tục xử lý sự kiện giống nhau trong một sổ làm việc, nó sẽ dẫn đến lỗi và không có thủ tục nào trong số chúng sẽ đượ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.
-
Sự kiện Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) Sự kiện này kích hoạt khi chúng ta thực hiện bất kỳ thay đổi nào đối với các 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 bất kỳ trang tính nào thì mã sẽ là:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 'do something Msgbox "done something" End Sub
“Sh” luôn là trang hoạt động. “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ờ trong Cel, prl B1 nếu A1 thay đổi. Trong trường hợp đó, chúng tôi sử dụng sự kiện workbook_sheetchange. Mã sẽ giống như sau:
Private Sub Workbook_SheetChange(ByVal Sh As Object, 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 trên mọi trang tính vì chúng tôi chưa chỉ định đối tượng “sh”.
-
Sự kiện Workbook_Activate () Sự kiện này được kích hoạt khi mã sự kiện chứa sổ làm việc được kích hoạt. Mã bộ xương cho sự kiện này là:
Private Sub Workbook_Activate() End Sub
Một ví dụ đơn giản là hiển thị tên sổ làm việc khi nó được chọn.
Private Sub Workbook_Activate() MsgBox "You are on workbook " & Activeworkbook.Name End Sub
Ngay sau khi bạn truy cập sổ làm việc có chứa mã này, sự kiện sẽ chạy và sẽ được hiển thị thông báo “Bạn đang sử dụng tên sổ làm việc” (trong trường hợp của tôi là sheet2).
-
Sự kiện Workbook_Open () Đây là một trong những câu hỏi được hỏi nhiều nhất rằng làm thế nào để chạy macro ngay khi sổ làm việc mở ra. Đây là câu trả lời. Sự kiện sổ làm việc này được chạy ngay sau khi sổ làm việc được mở. Không giống như Workbook_Activate (), mã này chỉ chạy một lần, không phải mỗi lần nó được kích hoạt.
Private Sub Workbook_Open() 'your code ' End Sub
Ví dụ dưới đây sự kiện Workbook_Open sẽ đơn giản bật lên một thông báo chào mừng, khi bạn mở mã chứa sổ làm việc.
Private Sub Workbook_Open() MsgBox "Welcome to the Master File" End Sub
-
Sự kiện Workbook_Deactivate () Sự kiện này kích hoạt khi rời khỏi mã chứa sổ làm việc. Nói cách khác, nếu bạn muốn làm điều gì đó, chẳng hạn như ẩn trang tính hoặc bất cứ điều gì khi bạn chuyển đổi sổ làm việc, hãy sử dụng sự kiện VBA này. Cú pháp là:
Private Sub Workbook_Deactivate() 'your code ' End Sub
Ví dụ dưới đây sự kiện Workbook_Deativate sẽ chỉ 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 Workbook_Deactivate() MsgBox "You Left The Master Sheet" End Sub
-
Sự kiện Workbook_BeforeClose () Sự kiện này kích hoạt khi bạn xác nhận việc xóa trang tính có chứa sự kiện VBA. Cú pháp rất đơn giản:
Private Sub Workbook_BeforeClose(Cancel as Boolean) End Sub
Có thể đặt Cancel thành true nếu bạn muốn giữ cho sổ làm việc mở.
Đoạn mã dưới đây sẽ hỏi bạn xem bạn có muốn lưu nội dung của sổ làm việc sắp đóng cửa hay không.
Private Sub Workbook_BeforeClose(Cancel as Boolean) ans = MsgBox("Do you want to save the content of this workbook?", vbYesNo) If ans = True Then thisworkbook.save End If End Sub
-
Sự kiện Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Sự kiện này kích hoạt khi trước khi sổ làm việc được lưu. Cú pháp rất đơn giản:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
SaveAsUI được đặt Đúng nếu có thay đổi trong sổ làm việc (không phải trong VBA).
Cancel có thể được đặt thành true nếu bạn muốn không lưu sổ làm việc.
Đoạn mã dưới đây sẽ hỏi bạn xem bạn có muốn lưu nội dung của sổ làm việc sắp lưu hay không.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo) If ans = False Then Cancel = True End If End Sub
-
Sự kiện Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Sự kiện này kích hoạt khi trước khi sổ làm việc được lưu. Cú pháp rất đơn giản:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
SaveAsUI được đặt Đúng nếu có thay đổi trong sổ làm việc (không phải trong VBA).
Cancel có thể được đặt thành true nếu bạn muốn không lưu sổ làm việc.
Đoạn mã dưới đây sẽ hỏi bạn xem bạn có muốn lưu nội dung của sổ làm việc sắp lưu hay không.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Do you really want to save the content of this workbook?", vbYesNo) If ans = False Then Cancel = True End If End Sub
-
Sự kiện Workbook_NewSheet (ByVal Sh As Object) Sự kiện này kích hoạt khi bạn thêm một trang tính mới vào sổ làm việc. Cú pháp rất đơn giản:
Private Sub Workbook_NewSheet(ByVal Sh As Object) End Sub
Sh là đối tượng trang tính. Kiểu thực sự là một đối tượng cốt lõi để nếu chúng ta thêm trang tính biểu đồ, trang tính macro hoặc trang tính hộp thoại thì sự kiện vẫn hoạt động.
Đoạn mã dưới đây sẽ thêm và hiển thị tên của trang tính mới được thêm vào.
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "You added a new sheet. " & Sh.Name End Sub
Các sự kiện khác của đối tượng sổ làm việc. Chúng ta không thể thảo luận tất cả ở đây. Nếu bạn muốn biết về một số sự kiện cụ thể, hãy hỏi trong phần bình luận bên dưới. Tôi hy vọng tôi đã có thể giải thích những điều cơ bản về sự kiện sổ làm việc trong bài viết này. Hãy cho tôi biết nếu nó giúp bạn 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.