Cách sử dụng hàm CreateObject để thiết lập tham chiếu trong VBA Excel

Nội dung được viết bởi Thanh Hằng

Hàm CreateObject được sử dụng để tạo các đối tượng trong VBA Excel. Nhưng tại sao chúng ta phải sử dụng hàm CreateObject nếu chúng ta có thể tạo trực tiếp một đối tượng bằng cách sử dụng từ khóa mới? 

Trong bài viết này, chúng ta sẽ cùng trả lời cho câu hỏi trên bằng cách tìm hiểu chi tiết về hàm CreateObject trong VBA Excel qua một số ví dụ cụ thể nhé!

 Tuyệt đỉnh VBA - Viết code trong tầm tay

Hàm CreateObject trong VBA Excel

Bất cứ khi nào bạn gán một đối tượng cho một biến đối tượng, VBA sẽ thực hiện một quá trình gọi là binding. Các đối tượng có thể bị early binding hoặc late binding. 

  • Early binding là khi một đối tượng được khai báo trong Excel thuộc loại đối tượng cụ thể, chẳng hạn như Trang tính hoặc Sổ làm việc.
  • Late binding xảy ra khi các liên kết đối tượng chung được thực hiện, chẳng hạn như kiểu khai báo Object và Variant.

Việc tạo một đối tượng bằng CreateObject được gọi là Late Binding. Trong quá trình late binding, việc tạo ra các đối tượng sẽ xảy ra trong thời gian chạy mã mà không cần thêm bất kỳ một thao tác nào. Ví dụ: Nếu bạn tạo một giao dịch với các ứng dụng khác và bạn sử dụng early binding bằng cách thêm tham chiếu và sử dụng từ khóa mới. Sau đó, bạn chuyển mã đó sang một số máy khác, thì bạn sẽ phải thêm các tham chiếu trên máy đó. Nhưng nếu bạn đã sử dụng hàm CreateObject trong VBA để tạo đối tượng trên các ứng dụng khác, bạn sẽ không cần thêm các tham chiếu ở các máy khác, trong trường hợp bạn chuyển hoặc chia sẻ mã.

Cú pháp của hàm CreateObject

Cú pháp CreateObject trong VBA Excel là:

Set object_name = CreateObject(classname as string,[servername])

Trong đó:

  • classname as string (bắt buộc): Là một chuỗi đề cập đến tên của ứng dụng và lớp của đối tượng được tạo. Tên ứng dụng và lớp của đối tượng được tạo phải được khai báo trong AppName.ObjecType. Ví dụ, nếu chúng ta muốn một đối tượng của ứng dụng Word thì chúng ta sẽ viết mã là: "Word.Application". 
  • [servername] (tùy chọn): Là một chuỗi tên của máy chủ mạng nơi đối tượng sẽ được tạo. Nếu tên máy chủ là một chuỗi trống (""), máy cục bộ sẽ được sử dụng (chúng ta sẽ không xem xét điều này trong bài viết).

Ưu điểm của CreateObject để tạo đối tượng

Ưu điểm chính của CreateObject là làm cho mã của bạn có tính di động (khi việc tạo đối tượng là mục đích chính). Bạn có thể chia sẻ mã cho bất kỳ ai mà không cần lo lắng về việc họ đã thêm tham chiếu vào ứng dụng hay đối tượng hay chưa.

Nhược điểm của CreateObject trong VBA Excel

Những thiếu sót của phương pháp CreateObject là:

  • Bạn cần biết cấu trúc của Class - Lớp mà bạn sẽ sử dụng để tạo đối tượng.
  • Khi bạn đã tạo đối tượng, bạn hoàn toàn phải ghi nhớ các phương thức và thuộc tính của đối tượng, vì VBA không cung cấp bất kỳ intellisense nào để giúp bạn.

Xem thêm: Hướng dẫn về đối tượng Range trong VBA cơ bản

Ví dụ 1: Sử dụng CreateObject để mở ứng dụng Microsoft Word bằng Excel VBA

Nếu bạn muốn sử dụng tính năng early binding, chúng ta sẽ thêm các tham chiếu đến ứng dụng Word bằng Tools -> References

 

Cách sử dụng hàm CreateObject để thiết lập tham chiếu trong VBA Excel

Gitiho sẽ hướng dẫn bạn sử dụng cú pháp CreateObject trong VBA Excel để mở ứng dụng Word. Đoạn mã của chúng ta như sau:

Sub OpenWordApp()     
Dim wordApp As New Word.Application     
Dim wordDoc As Document     
wordApp.Visible = True     
wordDoc = wordApp.Documents.Add 
End Sub

Ưu điểm của mã này, đó là bạn nhận được sự hỗ trợ của VBA, nó hiển thị cho bạn phương thức và thuộc tính có sẵn của đối tượng mà bạn đã tạo và sẽ hoạt động hoàn toàn tốt với hệ thống của bạn. Tuy nhiên, nếu bạn chia sẻ mã này cho người khác và họ chưa thêm tham chiếu vào thư viện Microsoft Word, họ sẽ gặp lỗi sau đây:

Cách sử dụng hàm CreateObject để thiết lập tham chiếu trong VBA Excel


Để tránh lỗi này, chúng ta hãy sử dụng đoạn mã dưới đây:

Sub OpenWordApp()     
Dim wordApp As Object          
Set wordApp = CreateObject("Word.Application")          
Dim wordDoc As Object     
wordApp.Visible = True     
Set wordDoc = wordApp.Documents.Add 
End Sub

Đoạn mã trên sẽ hoạt động hoàn toàn tốt trên mọi máy tính. Nó có tính di động vì chúng ta đang thực hiện late binding bằng cách sử dụng phương thức CreateObject để tạo đối tượng.

Ví dụ 2: Tạo đối tượng Workbook bằng hàm CreateObject

Nếu bạn đang làm việc với VBA, bạn phải tạo hoặc thêm Workbook - sổ làm việc bằng cách sử dụng từ khóa mới. Trong ví dụ này, chúng ta sẽ thực hiện thao tác đó một cách nhanh gọn hơn bằng cách sử dụng CreateObject với đoạn mã sau đây:

Sub addSheet()          
' Declare an object variable to hold the object     
' reference. Dim as Object causes late binding.     
Dim ExcelSheet As Object     
Set ExcelSheet = CreateObject("Excel.Sheet")     
' Make Excel visible through the Application object.     
ExcelSheet.Application.Visible = True     
' Place some text in the first cell of the sheet.     
ExcelSheet.Application.Cells(1, 1).Value = "This is column A, row 1"     
' Save the sheet to C:\test.xls directory.     
ExcelSheet.SaveAs "C:\TEST.XLS"     
' Close Excel with the Quit method on the Application object.     ExcelSheet.Application.Quit     
' Release the object variable.     
Set ExcelSheet = Nothing 
End Sub

Kết luận

Trên đây là cách bạn có thể sử dụng chức năng CreateObject để tạo các đối tượng trong VBA kèm các ví dụ cụ thể. Gitiho hy vọng bạn đã hiểu và áp dụng thành công cho công việc của mình. Nếu bạn có bất kỳ câu hỏi nào liên quan đến bài viết này hoặc bất kỳ câu hỏi nào khác về VBA, hãy cho mình biết trong phần bình luận bên dưới nhé!

Khóa học phù hợp với bất kỳ ai đang muốn tìm hiểu lại Excel từ con số 0. Giáo án được Gitiho cùng giảng viên thiết kế phù hợp với công việc thực tế tại doanh nghiệp, bài tập thực hành xuyên suốt khóa kèm đáp án và hướng dẫn giải chi tiết. Tham khảo ngay bên dưới!

/5 - ( bình chọn)

/5 - ( bình chọn)

0 thảo luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông