Đối tượng Workbook trong Excel VBA là đối tượng đại diện cho một file Excel và là đối tượng chúng ta sẽ làm việc cùng khi muốn tự động hóa các thao tác liên quan đến Workbook như tạo Workbook mới, lưu Workbook, mở Workbook, đóng Workbook …
Xem nhanh
Trong trường hợp bạn đang làm việc với nhiều Workbook trong một Instance của phần mềm Excel, bạn cần biết cách để tham chiếu chính xác đến Workbook bạn cần. Chúng ta có một số đối tượng để phân biệt như sau
Đối tượng ThisWorkbook là một đối tượng thuộc loại Workbook, khi bạn gõ đoạn code sau vào cửa sổ Immediate (View > Immediate Window) thì cũng sẽ nhận được tên kiểu là Workbook:
?typename(ThisWorkbook)
ThisWorkbook trong trường hợp này là chính Workbook mà code VBA/Macro của bạn đang được thực thi.
Đối tượng ActiveWorkbook là một đối tượng thuộc loại Workbook, khi bạn gõ đoạn code sau vào cửa sổ Immediate (View > Immediate Window) thì cũng nhận được tên kiểu là Workbook:
?typename(ActiveWorkbook)
ActiveWorkbook là Workbook đang được người dùng chọn bằng chuột, đang ở phía trước các Workbook khác, đang có focus, hoặc là Workbook được gọi bởi phương thức Activate
của đối tượng Workbook:
Tham chiếu tới Workbook bằng tên file Excel:
Set wb = Application.Workbooks("Book1.xlsx").Activate
Tham chiếu tới Workbook số thứ tự khi mở ra:
Set wb = Application.Workbooks(2).Activate
Và tất nhiên, bạn cũng có thể gọi Activate trên đối tượng ThisWorkbook
Set wb = ThisWorkbook.Activate
Vì Workbook là một đối tượng, nên khi khai báo biến và khởi tạo giá trị, chúng ta phải dùng từ khóa Set
Các cách để tham chiếu tới Workbook như sau:
' Tham chiếu tới ThisWorkbook
Set wb1 = ThisWorkbook
' Tham chiếu tới ActiveWorkbook
Set wb2 = ActiveWorkbook
' Mở Workbook tại đường dẫn và tham chiếu tới Workbook đó
Set wb3 = Workbooks.Open("_đường_dẫn_tới_file_excel")
' Tham chiếu tới Workbook bằng số thứ tự
Set wb4 = Workbooks(3)
' Tham chiếu tới Workbook bằng tên file Excel
Set wb5 = Workbooks("Book1.xlsx")
' Tham chiếu tới Workbook mới được tạo ra
Set wb6 = Workbooks.Add
Sau khi đã tham chiếu và làm việc với Workbook, chúng ta có thể đóng Workbook bằng Code VBA. Để đóng Workbook, chúng ta gọi phương thức Close trên biến Workbook chúng ta đã tham chiếu tới. Ví dụ để đóng một Workbook và lưu lại những thay đổi đã được thực hiện trên Workbook đó, chúng ta code như sau:
Sub close_wb()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Book1.xlsx")
wb.Close Savechanges:=True
End Sub
Để đóng một Workbook và không lưu bất kỳ thay đổi nào, bạn có thể dùng đoạn code như sau:
Sub close_wb()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Book1.xlsx")
wb.Close Savechanges:=False
End Sub
Như vậy, với việc đóng Workbook, thì chúng ta có thể sử dụng thêm tham số Savechanges
để có thể thực hiện lưu hoặc không lưu những thay đổi trên Workbook.
Để mở một Workbook trong VBA Excel, chúng ta có thể sử dụng phương thức Open như sau
Sub open_wb()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Book1.xlsx")
' Làm việc tiếp với đối tượng wb
End Sub
Để lưu một Workbook trong code VBA Excel thì chúng ta có một số phương thức hay sử dụng như sau
Trong trường hợp bạn muốn lưu Workbook lại thường xuyên để đề phòng cho trường hợp mất điện, lưu những thay đổi trong khi làm việc, thì bạn có thể gọi phương thức save trên đối tượng Workbook như sau
Sub save_wb()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Book1.xlsx")
wb.Save
End Sub
Để lưu Workbook với một tên khác, vào một đường dẫn khác, thì chúng ta có thể gọi phương thức SaveAs trên đối tượng Workbook như sau:
Sub save_wb()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Book1.xlsx")
wb.SaveAs Filename:="_đường_dẫn_\Tên_file.xlsx"
End Sub
Nếu kết hợp với việc tách dữ liệu từ một File ra nhiều file, thì trong khi chạy vòng lặp để tách dữ liệu, thì bạn sẽ cần gọi SaveAs và thay đổi đường dẫn tùy theo file Excel đang được tách ra. Nhưng để xử lý trường hợp này, bạn nên dùng phương thức SaveCopyAs như hướng dẫn ở đoạn ngay sau đây.
Một ứng dụng lý tưởng để sử dụng SaveCopyAs chúng ta có thể nghĩ tới là dùng để sao lưu dữ liệu, ví dụ bạn sẽ chạy đoạn code để sao lưu dữ liệu vào một thư mục và đặt tên cho bản sao lưu theo thời gian chẳng hạn
Sub save_wb()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Book1.xlsx")
wb.SaveCopyAs Filename:="_đường_dẫn_\" & Format(Now,"hh_mm_ss") & "Tên_file.xlsx"
End Sub
Hi vọng là qua bài viết này Thanh đã chia sẻ tới các bạn những thao tác hay dùng nhất với đối tượng Workbook trong VBA Excel. Một phần lớn những kiến thức này sẽ trở nên hữu dụng khi bạn kết hợp với các kiến thức trong khóa học VBA cùng Thanh tại địa chỉ:
Khóa học VBA cơ bản:
Tự động hóa Excel với lập trình VBA cho người mới bắt đầu
Toàn bộ các khóa học lập trình VBA:
Tham khảo toàn bộ các khóa học lập trình VBA