Khi lập trình VBA trong Excel với đối tượng Workbook, chúng ta rất dễ nhầm lẫn khi làm việc với 2 đối tượng là ActiveWorkbook và ThisWorkbook. Vậy sự khác nhau giữa 2 đối tượng này là gì? Cách hiểu và cách sử dụng 2 đối tượng này như thế nào? Hãy cùng Học Excel Online tìm hiểu trong bài viết này nhé.
Xem nhanh
Đây là 2 đối tượng liên quan tới Workbook (tức là 1 file Excel), trong đó:
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
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.
* Chú ý:
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
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:
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 qua 2 ví dụ trên, các bạn đã có thể hiểu được cách hoạt động của hai đối tượng ActiveWorkbook và ThisWorkbook.
Ngoài ra để biết thêm về đối tượng Workbook, các bạn có thể tìm hiểu qua bài viết:
Hướng dẫn cách viết code với đối tượng Workbook trong VBA Excel
Tìm hiểu về ý nghĩa và cách dùng các sự kiện trong VBA Excel