Sửa lỗi Run-time error '429': ActiveX component can't create object trong Excel VBA

intermediate📊 Microsoft Excel2026-05-26| Windows 10/11, Microsoft Excel 2016/2019/2021/365 (32-bit và 64-bit)

Error Message

Run-time error '429': ActiveX component can't create object
#vba#activex#com#lỗi runtime#registry

Thông báo lỗi

Khi làm việc với Excel Macro hoặc VBA, bạn có thể gặp phải cửa sổ thông báo lỗi cụ thể này:

Run-time error '429': 
ActiveX component can't create object

Lỗi này thường xảy ra khi mã của bạn cố gắng tạo một phiên bản (instance) của đối tượng COM hoặc một ứng dụng bên ngoài (như Outlook, Word, hoặc một FileSystemObject) nhưng hệ điều hành Windows không thể tìm thấy hoặc khởi tạo thành phần đó.

Các nguyên nhân phổ biến

Lỗi 429 hiếm khi liên quan đến lỗi đánh máy trong mã của bạn; nó hầu như luôn là vấn đề về cấu hình giữa VBA và Windows Registry. Các nguyên nhân phổ biến bao gồm:

  • Tệp DLL hoặc OCX cần thiết chưa được đăng ký trong Windows.
  • Thiếu thư viện trong danh sách VBA References.
  • Sự không tương thích phiên bản giữa Office 32-bit và 64-bit.
  • Bản cài đặt Office hoặc thành phần ActiveX cụ thể bị lỗi (corrupt).
  • Ứng dụng đích (ví dụ: Outlook) không được cài đặt trên máy tính đang chạy mã.

Bước 1: Xác định dòng lệnh bị lỗi

Trước tiên, hãy nhấn Debug khi lỗi xuất hiện. VBA sẽ làm nổi bật dòng lệnh gây ra lỗi. Thông thường, nó sẽ trông giống như một trong các trường hợp sau:

' Kịch bản A: Late Binding
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Kịch bản B: Early Binding
Set objOutlook = New Outlook.Application

Nếu lỗi xảy ra ở CreateObject, Windows không thể tìm thấy Program ID (ProgID) trong registry. Nếu nó xảy ra ở New, có vấn đề với các tham chiếu thư viện (library references) của bạn.

Bước 2: Đăng ký thành phần thủ công

Nếu bạn đang sử dụng một thành phần tiêu chuẩn như Scripting.FileSystemObject hoặc một tệp DLL tùy chỉnh, tệp gốc có thể cần phải được đăng ký lại. Đây là cách khắc phục phổ biến cho các môi trường mà phần mềm vừa được cập nhật hoặc di chuyển.

  • Mở Command Prompt với quyền Quản trị viên (Administrator).
  • Nhập lệnh sau cho Windows 64-bit (đối với các thành phần 32-bit phổ biến):
regsvr32.exe C:\Windows\SysWOW64\scrrun.dll

Đối với các thành phần 64-bit hoặc trên hệ thống 32-bit:

regsvr32.exe C:\Windows\System32\scrrun.dll

Lưu ý: Thay thế scrrun.dll bằng tệp DLL cụ thể mà bạn đang cố gắng sử dụng (ví dụ: dao360.dll cho DAO).

Bước 3: Kiểm tra VBA References

Nếu bạn đang sử dụng "Early Binding" (khai báo các kiểu cụ thể như Dim app as Outlook.Application), VBA cần một tham chiếu hợp lệ đến tệp thư viện (.tlb, .olb, hoặc .dll).

  • Trong cửa sổ soạn thảo VBA, đi tới Tools > References.
  • Tìm các mục được đánh dấu là MISSING: [Tên thư viện].
  • Nếu bạn thấy một tham chiếu bị thiếu, hãy bỏ chọn nó.
  • Cuộn xuống để tìm phiên bản chính xác của thư viện đó hiện đang được cài đặt trên hệ thống của bạn và chọn nó.
  • Nhấn OK và thử chạy lại mã.

Bước 4: Xử lý xung đột giữa 32-bit và 64-bit

Đây là vấn đề gây đau đầu thường xuyên cho các lập trình viên khi chuyển từ các phiên bản Office cũ sang Office 365 64-bit. Một số thành phần ActiveX (như Common Controls mscomctl.ocx) chỉ hoạt động trong Excel 32-bit.

Nếu mã của bạn dựa trên một điều khiển ActiveX 32-bit, nó sẽ gây ra lỗi 429 trong môi trường Excel 64-bit. Trong trường hợp này, bạn có hai lựa chọn:

  • Hạ cấp Office xuống phiên bản 32-bit (được khuyến nghị cho các ứng dụng doanh nghiệp cũ).
  • Cập nhật mã của bạn để sử dụng giải pháp thay thế tương thích 64-bit (ví dụ: sử dụng khai báo Win64 API hoặc các điều khiển UserForm có sẵn).

Bước 5: Sửa lỗi Office thông qua /regserver

Nếu bản thân Excel đang gặp khó khăn khi giao tiếp với các ứng dụng Office khác (như Word hoặc Outlook), bạn có thể buộc Excel ghi lại các khóa registry mà không cần cài đặt lại toàn bộ.

  • Đóng tất cả các ứng dụng Office.
  • Nhấn Win + R để mở hộp thoại Run.
  • Nhập lệnh sau và nhấn Enter:
excel.exe /regserver

Màn hình có thể nhấp nháy trong giây lát trong khi Excel thiết lập lại đăng ký. Điều này thường khắc phục các lỗi tự động hóa (automation errors) giữa Excel và Word/Outlook.

Các bước xác minh

Để xác nhận việc khắc phục, hãy tạo một module mới và chạy đoạn mã kiểm tra này. Nó cố gắng tạo một FileSystemObject, đây là nguyên nhân phổ biến nhất gây ra Lỗi 429.

Sub TestActiveXFix()
    On Error GoTo ErrorHandler
    Dim fso As Object
    
    ' Thử tạo đối tượng
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    MsgBox "Success! ActiveX component created successfully.", vbInformation
    Set fso = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "Fix failed. Error " & Err.Number & ": " & Err.Description, vbCritical
End Sub

Nếu đoạn mã này chạy và hiển thị thông báo "Success", việc đăng ký ActiveX của hệ thống cho các thư viện kịch bản cốt lõi đang hoạt động bình thường.

Mẹo chuyên nghiệp

  • Sử dụng Late Binding khi phân phối: Nếu bạn đang chia sẻ tệp Excel của mình với người khác, hãy sử dụng CreateObject("Library.Class") thay vì thêm References. Điều này giúp tránh lỗi "Missing Reference" trên các máy tính có phiên bản phần mềm khác nhau.
  • Kiểm tra quyền truy cập: Đôi khi, lỗi 429 xảy ra do người dùng không có quyền truy cập vào tệp DLL cụ thể hoặc khóa registry. Đảm bảo người dùng có quyền người dùng tiêu chuẩn đối với C:\Windows\System32.
  • Chặn bởi phần mềm diệt virus: Một số thiết lập diệt virus nghiêm ngặt có thể chặn việc tạo các đối tượng kịch bản (đặc biệt là WScript.Shell hoặc FileSystemObject). Nếu lỗi vẫn còn, hãy kiểm tra nhật ký bảo mật của bạn.

Related Error Notes