Tạo Đối Tượng trong VBA Excel: CreateObject hay Từ Khóa “New”?

Tạo Đối Tượng trong VBA Excel: CreateObject hay Từ Khóa “New”?

Bạn đã bao giờ thắc mắc về việc tạo đối tượng trong VBA Excel? Tại sao lại phải dùng hàm CreateObject khi đã có từ khóa New? Bài viết này sẽ đi sâu phân tích CreateObject trong VBA Excel, so sánh với New, đồng thời cung cấp các ví dụ thực tế giúp bạn nắm vững cách sử dụng và lựa chọn phương pháp phù hợp nhất cho dự án của mình.

Trong 50 từ đầu tiên này, chúng ta đã cùng nhau đặt ra câu hỏi về việc tạo đối tượng trong VBA Excel, mở ra chủ đề chính của bài viết xoay quanh hàm CreateObject.

Early Binding và Late Binding: Nền Tảng Của Việc Tạo Đối Tượng

Khi gán một đối tượng cho biến đối tượng, VBA thực hiện quá trình gọi là binding. Có hai loại binding: early bindinglate binding.

  • Early Binding: Khai báo đối tượng thuộc loại cụ thể trong Excel, ví dụ như Worksheet (Trang tính) hoặc Workbook (Sổ làm việc). Phương pháp này giúp tăng tốc độ xử lý và cung cấp Intellisense, hỗ trợ gợi ý mã.

  • Late Binding: Liên kết đối tượng chung, ví dụ như kiểu khai báo ObjectVariant. CreateObject chính là một ví dụ điển hình của late binding. Việc tạo đối tượng diễn ra trong thời gian chạy, không cần thêm thao tác nào khác.

CreateObject trong VBA Excel: Chi Tiết và Ví Dụ

CreateObject cho phép tạo đối tượng trong thời gian chạy. Điều này đặc biệt hữu ích khi làm việc với các ứng dụng khác ngoài Excel.

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

Set object_name = CreateObject(classname, [servername])
  • classname (bắt buộc): Chuỗi xác định ứng dụng và lớp của đối tượng. Ví dụ: "Word.Application" để tạo đối tượng ứng dụng Word.
  • servername (tùy chọn): Chuỗi tên máy chủ nơi tạo đối tượng. Nếu trống (“”), máy cục bộ được sử dụng.

Ưu điểm của CreateObject

  • Tính di động: Chia sẻ mã dễ dàng mà không cần lo lắng về việc người nhận đã thêm tham chiếu đến ứng dụng hay đối tượng chưa. Đây là lợi thế lớn nhất của CreateObject.
  • Linh hoạt: Tạo đối tượng từ các ứng dụng khác mà không cần early binding.

Nhược điểm của CreateObject

  • Cần biết cấu trúc lớp: Bạn phải nắm rõ cấu trúc của lớp muốn tạo đối tượng.
  • Không có Intellisense: VBA không hỗ trợ gợi ý mã khi dùng CreateObject, dễ dẫn đến lỗi cú pháp.

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

So Sánh CreateObject và Từ Khóa “New”

Đặc điểm CreateObject Từ khóa “New”
Binding Late Binding Early Binding
Tính di động Cao Thấp
Hiệu suất Thấp hơn Cao hơn
Intellisense Không
Tham chiếu Không cần Cần

Việc lựa chọn giữa CreateObjectNew phụ thuộc vào nhu cầu cụ thể của dự án. Nếu cần tính di động cao, CreateObject là lựa chọn tốt. Nếu ưu tiên hiệu suất và hỗ trợ Intellisense, New là phù hợp hơn.

Ví dụ 1: Mở Word từ Excel bằng CreateObject

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

Đoạn mã này minh họa cách mở ứng dụng Word từ Excel mà không cần thêm tham chiếu, đảm bảo tính di động.

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

Ví dụ 2: Tạo Workbook bằng CreateObject

Sub addSheet()
    Dim ExcelSheet As Object
    Set ExcelSheet = CreateObject("Excel.Sheet")
    ExcelSheet.Application.Visible = True
    ExcelSheet.Application.Cells(1, 1).Value = "This is column A, row 1"
    ExcelSheet.SaveAs "C:TEST.XLS"
    ExcelSheet.Application.Quit
    Set ExcelSheet = Nothing
End Sub

Ví dụ này cho thấy cách tạo Workbook mới bằng CreateObject.

Kết Luận

CreateObject là công cụ mạnh mẽ trong VBA Excel, cho phép tạo đối tượng linh hoạt và di động. Tuy nhiên, cần cân nhắc giữa ưu và nhược điểm của CreateObject so với New để lựa chọn phương pháp phù hợp nhất. Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về CreateObject và cách sử dụng hiệu quả trong VBA Excel.

FAQ – Những Câu Hỏi Thường Gặp về CreateObject

1. Khi nào nên dùng CreateObject thay vì từ khóa “New”?

Nên dùng CreateObject khi cần chia sẻ mã VBA cho người khác mà không chắc chắn họ đã cài đặt các thư viện cần thiết. CreateObject cũng hữu ích khi bạn muốn tạo đối tượng động trong thời gian chạy.

2. Làm thế nào để khắc phục nhược điểm không có Intellisense khi dùng CreateObject?

Bạn có thể tham khảo tài liệu về đối tượng bạn đang làm việc để biết các thuộc tính và phương thức có sẵn. Một cách khác là tạo một biến tạm thời với early binding để tận dụng Intellisense, sau đó gán giá trị cho biến Object của bạn.

3. Có thể sử dụng CreateObject với các ứng dụng khác ngoài Microsoft Office không?

Có, bạn có thể sử dụng CreateObject với bất kỳ ứng dụng nào hỗ trợ Automation, ví dụ như Internet Explorer, Outlook, v.v.

4. Sự khác biệt về hiệu suất giữa CreateObject và “New” là đáng kể không?

Trong hầu hết các trường hợp, sự khác biệt về hiệu suất không đáng kể. Tuy nhiên, nếu bạn thực hiện rất nhiều thao tác với đối tượng, early binding (từ khóa “New”) sẽ nhanh hơn.

5. Tôi có thể sử dụng CreateObject để tạo đối tượng trong cùng một ứng dụng Excel không?

Có thể, nhưng thường không cần thiết. Trong trường hợp này, sử dụng từ khóa “New” sẽ hiệu quả hơn.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *