Đối tượng Workbook trong Excel VBA là một trong những đối tượng được sử dụng thường xuyên nhất trong khi tự động hóa bất kỳ tác vụ nào với VBA. Bài này cung cấp các phương thức hay sử dụng của đối tượng Workbook.
Mỗi đối tượng Workbook tương ứng với một file excel.
Các phương thức của Workbook giúp chúng ta thực hiện các hành động khác nhau với Excel Workbooks. Ví dụ, chúng ta có thể Kích hoạt một Workbook và Xóa một Workbook hoặc Move Workbook. Và chúng ta cũng có thể Protect và UnProtect Workbooks.
Nội dung chính
Các phương thức của đối tượng Workbook
Dưới đây là các phương thức được sử dụng thường xuyên của đối tượng Workbook trong VBA:
Phương thức | Mô tả |
---|---|
Activate | Để kích hoạt một Workbook. |
Calculate | Để làm mới tất cả tính toán trong một Workbook. |
Close | Để close một Workbook. |
Save | Để save một Workbook. |
SaveAs | Để SaveAs một Workbook. |
SaveCopyAs | Để SaveCopyAs một Workbook. |
Phương thức Activate
Phương thức Activate của đối tượng Workbook trong VBA sẽ giúp bạn kích hoạt một Workbook cụ thể. Rất hữu ích khi bạn mở nhiều workbooks và muốn truy cập một Workbook cụ thể để thao tác hoặc đọc một số dữ liệu từ Active Workbook.
Tại sao chúng ta cần phải kích hoạt một Workbook bằng VBA?
Khi chúng ta phải xử lý nhiều workbooks (nhiều file excel) và bạn muốn đọc hoặc ghi vào một Workbook cụ thể thì bạn phải kích hoạt Workbook đó.
Ví dụ 1: Activate Workbook trong VBA với tên của Workbook
Sub ActiveWorkbookExample1() ' sử dụng tên của một Workbook Application.Workbooks("myFile.xlsx").Activate End Sub
Ví dụ 2: Activate Workbook trong VBA với chỉ số của Workbook
Sub ActiveWorkbookExample2() ' sử dụng chỉ số của một Workbook Set wb = Application.Workbooks(2).Activate End Sub
Ví dụ 3: Activate Workbook trong VBA với ThisWorkbook
Sử dụng ThisWorkbook bạn có thể activate Workbook chứa macro đang chạy như sau:
Sub ActiveWorkbookExample3() ' bạn có thể activate Workbook chứa macro đang chạy ThisWorkbook.Activate End Sub
Tạo biến tham chiếu đến Workbook
Vấn đề: Khi bạn phải làm việc với nhiều workbooks (nhiều file excel), mỗi Workbook có nhiều Worksheet. Bạn phải sử dụng phương thức Activate với hết Workbook này đến Workshet khác để đọc hoặc ghi dữ liệu từ chúng, điều này có thể dẫn đến mã rối rắm, khó hiểu khiến bạn lúng túng.
Giải quyết vấn đề
Để giải quyết vấn đề trên, có một giải pháp cho bạn đó là với mỗi Workbook bạn tạo ra một biến tham chiếu. Sau đó, bất cứ khi nào muốn sử dụng (Activate) Workbook nào bạn chỉ cần tham chiếu đến biến tương ứng.
Ví dụ:
' khai báo đối tượng wb Dim wbInput As Workbook Dim wbOutput As Workbook ' gán wbInput bằng Workbook đang hoạt động (ActiveWorkbook) Set wbInput = Application.ActiveWorkbook ' gán wbOutput bằng Workbooks.Open để mở file D:\test\Output.xlsx Set wbOutput = Application.Workbooks.Open("D:\test\Output.xlsx")
Sau đó, khi nào bạn sử dụng đến hai đối tượng wbInput, wbOutput thì nó tự động được kích hoạt, Khi đó bạn không cần phải gọi phương thức Activate nữa.
Có 6 cách để khởi tạo đối tượng Workbook
Từ khóa Set được sử dụng để để khởi tạo đối tượng Workbook.
Có 6 cách để khởi tạo đối tượng Workbook như sau:
' 1. khởi tạo bằng Workbook hiện tại (ThisWorkbook) Set wb = Application.ThisWorkbook ' 2. Khởi tạo bằng Workbook đang hoạt động (ActiveWorkbook) Set wb = Application.ActiveWorkbook ' 3. Khởi tạo bằng cách mở một Workbook khác (Workbooks.Open) Set wb = Application.Workbooks.Open("D:\test\myFile.xlsx", ReadOnly:=True) ' 4. khởi tạo bằng cách sử dụng tên của một Workbook Set wb = Application.Workbooks("myFile.xlsx") ' 5. khởi tạo bằng cách sử dụng chỉ số của một Workbook Set wb = Application.Workbooks(2) ' 6. tạo ra một Workbook mới Set wb = Workbooks.Add
Phương thức Close
Bạn có thể đóng một Workbook (tương ứng một file excel) bởi việc sử dụng phương thức Close của đối tượng Workbook trong Excel VBA.
Cú pháp:
Workbooks(“Workbook Name”).Close ([SaveChanges], [Filename], [RouteWorkbook])
Ví dụ 1: Close Workbook trong VBA với Savechanges: = True
Sub CloseWorkbookExample() Dim wb As Workbook Set wb = Workbooks.Open("D:\myFile.xlsx") wb.Close Savechanges:=True End Sub
Trong ví dụ trên, chúng ta tạo ra một biến có tên là wb trong câu lệnh đầu tiên. Chúng ta đã sử dụng phương thức 'Open' của workbook object để mở một bảng tính có tên là "D:\myFile.xlsx" và sau đó gán nó cho đối tượng wb trong câu lệnh thứ hai. Cuối cùng trong câu lệnh thứ ba, chúng ta đã sử dụng phương thức 'Close' của đối tượng workbook để đóng lại trên bảng tính đã xác định. Cuối cùng chúng ta đã đề cập đến 'Savechanges: = True', có nghĩa là nếu chúng ta đã thực hiện bất kỳ thay đổi trong bảng tính thì nó sẽ lưu các thay đổi.
Ví dụ 2: Close Workbook trong VBA với Savechanges: = False
Sub CloseWorkbookExample2() Workbooks("D:\myFile.xlsx").Close Savechanges:=False End Sub
Ví dụ trên giống như ví dụ 1. Sự khác biệt là chúng ta sử dụng 'Savechanges:=False', điều đó có nghĩa là nếu chúng ta thực hiện bất kỳ thay đổi trong bảng tính nó sẽ không được lưu lại.
Ví dụ 3: Close Workbook đang được activate
Sub CloseWorkbookExample3() ActiveWorkbook.Close Savechanges:=False End Sub
Ví dụ trên đóng bẳng tính đang được chọn và không lưu lại những gì thay đổi.
Phương thức Save
Chúng ta có thể lưu bảng tính bằng cách sử dụng phương thức 'Save' của đối tượng Workbook trong Excel VBA.
Cú pháp:
Workbooks(“Workbook Name”).Save
Ví dụ 1: Save Workbook trong VBA
Sub SaveWorkbookExample1() Dim wb As Workbook Set wb = Workbooks.Add wb.Save End Sub
Trong ví dụ trên, chúng ta đã tạo ra biến có tên wb trong câu lệnh đầu tiên. Chúng ta đã sử dụng phương thức 'Add' của đối tượng Workbook để tạo ra bảng tính mới và sau đó gán nó cho đối tượng wb trong câu lệnh thứ hai. Cuối cùng trong câu lệnh thứ ba, chúng ta đã sử dụng phương thức 'Save' của đối tượng Workbook để lưu lại bảng tính vừa tạo.
Câu hỏi: Trong ví dụ trên, bảng tính trên đã được tạo ra và lưu ở đâu?
Trả lời: Trong ví dụ trên bảng tính trên đã được lưu tại thư mục Documents.
Ví dụ 1: Save Workbook hiện tại (đang được kích hoạt)
Sub SaveWorkbookExample1() ActiveWorkbook.Save End Sub
Trong ví dụ trên mọi thay đổi của Workbook đang được kích hoạt sẽ được lưu lại.
Phương thức SaveAs
Chúng ta có thể lưu bảng tính bằng cách sử dụng phương thức 'SaveAs' của đối tượng Workbook trong Excel VBA.
Cú pháp:
Workbooks(“Workbook Name”).SaveAs([Filename], [FileFormat], [Password], [WriteResPassword], [ReadOnlyRecommended], [CreateBackup], [AccessMode As XlSaveAsAccessMode = xlNoChange], [ConflictResolution], [AddToMru], [TextCodepage], [TextVisualLayout], [Local])
Ví dụ: SaveAs Workbook trong VBA
Sub SaveAsWorkbookExample() Dim wb As Workbook Set wb = Workbooks.Add wb.SaveAs Filename:="D:\test\Sample.xlsx" End Sub
Trong ví dụ trên, chúng ta đã tạo ra biến có tên wb trong câu lệnh đầu tiên. Chúng ta đã sử dụng phương thức 'Add' của đối tượng Workbook để thêm bảng tính mới và sau đó gán nó cho đối tượng wb trong câu lệnh thứ hai. Cuối cùng trong câu lệnh thứ ba chúng ta đã sử dụng phương thức 'SaveAs' của đối tượng Workbook để lưu bảng tính ở vị trí khác và tên file là "D:\test\Sample.xlsx" (Bạn có thể thay đổi tên tập tin theo ý muốn của bạn).
Phương thức SaveCopyAs
Với phương thức SaveCopyAs của đối tượng Workbook trong VBA, bạn có thể lưu một bản sao của Workbook đang mở.
Tại sao cần sử dụng phương thức SaveCopyAS?
Đôi khi bạn muốn lưu bảng tính với những thay đổi và bạn không muốn sửa đổi bảng tính đã mở. Vì vậy, chỉ cần bạn cần phải sử dụng phương thức 'SaveCopyAs' của đối tượng Workbook.
Cú pháp:
Workbooks(“Workbook Name”).SaveCopyAs([Filename])
Ví dụ: SaveCopyAs Workbook trong VBA
Sub WorkbookSaveCopyAsExample() ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & "ver1_" & ThisWorkbook.Name End Sub
Các thuộc tính của đối tượng Workbook
Dưới đây là các thuộc tính được sử dụng thường xuyên của đối tượng Workbook trong VBA:
Properties | Mô tả |
---|---|
Path | Để lấy ra đường dẫn tuyệt đối của Workbook. |
FullName | Để lấy ra tên đầy đủ đối của Workbook. |
Sheets | Lấy ra một collection của Charts và Worksheets.. |
Worksheets | Để lấy ra tất cả các Worksheet của Workbook. |
Tìm hiểu thêm: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbook-object-excel