Hướng dẫn cách phân biệt ActiveWorkbook với ThisWorkbook khi lập trình VBA Excel

Chia sẻ bài viết này:
  •  
  •  
  •  
  •  
  •  
  •  
  •   
  •   

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é.

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 đó:

Đố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

Đố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.

* 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

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 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


Chia sẻ bài viết này:
  •  
  •  
  •  
  •  
  •  
  •  
  •   
  •