11/08/2018, 19:19

Đối tượng Workbook trong Excel VBA

Học java core Đố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 ...

Học java core

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

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
Note: với Workbook đang được activate, tức là Workbook mà đang được chọn. Khi đó mọi thao tác đọc và ghi từ macro sẽ ảnh hưởng trực tiếp đến nó.

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:	estOutput.xlsx
Set wbOutput = Application.Workbooks.Open("D:	estOutput.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:	estmyFile.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.

Note: Đối tượng ActiveWorkbook đại diện cho bảng tính hiện tại mà đang kích hoạt.

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:	estSample.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: estSample.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

Học java core
0