Blog
Phân biệt ActiveWorkbook với ThisWorkbook khi code VBA trong Excel

Khi làm việc với đối tượng Workbook trong VBA, đặc biệt đối với người mới bắt đầu sẽ rất khó phân biệt được 2 đối tượng là ActiveWorkbook và ThisWorkbook. Vậy hãy cùng UniTrain tìm hiểu sự khác biệt cũng như cách sử dụng của 2 đối tượng này trong bài viết sau nhé!
Cách phân biệt ActiveWorkbook với ThisWorkbook khi lập trình VBA
Đây là 2 đối tượng liên quan tới Workbook (tức là 1 file Excel), trong đó:
1. Đối tượng ActiveWorkbook
ActiveWorkbook là Workbook đang được kích hoạt.
Bạn có thể đặt Macro tại 1 Workbook (ví dụ WB_A) và kích hoạt 1 Workbook khác (ví dụ WB_B)
Khi chạy Macro đó với đối tượng ActiveWorkbook thì kết quả sẽ xuất hiện tại WB_B mà không xuất hiện trong WB_A
2. Đối tượng ThisWorkbook
ThisWorkbook là Workbook chứa các câu lệnh Macro.
Bạn có thể đặt Macro tại 1 Workbook (ví dụ WB_A) và kích hoạt 1 Workbook khác (ví dụ WB_B)
Khi chạy các Macro mà đề cập tới ThisWorkbook thì câu lệnh đó sẽ chỉ thực thi tại Workbook nơi chứa Macro đó (là WB_A) dù đó không phải là Workbook đang được kích hoạt.
3. Lưu ý
Khi làm việc với duy nhất 1 Workbook trong ứng dụng Excel thì ActiveWorkbook cũng chính là ThisWorkbook (chỉ có 1 Workbook được kích hoạt chính là nơi đặt câu lệnh Macro)
Khi làm việc với nhiều Workbook cùng lúc thì khi bạn kích hoạt Workbook nào thì Workbook đó là ActiveWorkbook.
Macro/Code đặt tại Workbook nào thì Workbook đó là ThisWorkbook
Cách thức hoạt động của câu lệnh Macro liên quan tới ActiveWorkbook và ThisWorkbook
Ví dụ 1: Đối tượng ThisWorkbook
Chúng ta có 2 Workbook đang mở có tên là AtvWB.xlsm và ThisWB.xlsm.
Trong đó Macro đặt tại ThisWB có tên là Test_01, trong Module1, Workbook đang được kích hoạt là AtvWB (vì trong ô A2 của Sheet1 trong Workbook AtvWB có ô vuông biểu thị con trỏ chuột đang chọn tới ô này)
Đối tượng trong câu lệnh tại Macro Test_01 là:
ThisWorkbook.Sheets(“Sheet1”).Range(“A1”).Value = “Hoc Excel Online”
Có nghĩa là: Gán vào ô A1 trong Sheet có tên là Sheet1 tại đối tượng ThisWorkbook nội dung là dòng chữ Hoc Excel Online
Khi chạy macro này ta có kết quả như sau:
- Tại ThisWB ô A1 xuất hiện dòng chữ Hoc Excel Online (là kết quả câu lệnh).
- AtvWB đang được kích hoạt nhưng không xảy ra hiện tượng gì.
Ví dụ 2: Đối tượng ActiveWorkbook
Cũng với ví dụ trên, chúng ta xét Macro là Test_02
ActiveWorkbook.Sheets(“Sheet1”).Range(“A2”).Value = “Hoc VBA Online”
Gán vào ô A2 trong Sheet1 của ActiveWorkbook dòng chữ Hoc VBA Online
Kết quả là khi chạy Macro Test_02 thì tại AtvWB (Workbook đang được kích hoạt) tại ô A2 xuất hiện kết quả, còn trong ThisWB là nơi chứa Macro đó không có hiện tượng gì xảy ra.
Hy vọng rằng bài viết trên của UniTrain, các bạn có thể phân biệt được 2 đối tượng ThisWorkbook và ActiveWorkbook để áp dụng vào công việc thực tế, nâng cao hiệu quả công việc.
Xem thêm
Hướng dẫn hàm Match trong Excel và các loại dò tìm ứng dụng
20 phím tắt Excel thông dụng hàng ngày trên máy tính Windows