2010-06-11 46 views
11

Sau khi cập nhật Microsoft Office 2007 lên Office 2010 một số kịch bản VBA tùy chỉnh nhúng trong phần mềm của chúng tôi thất bại trong việc biên dịch với các thông báo lỗi sau:Lập trình xây dựng lại .exd-file khi tải VBA

thư viện đối tượng không hợp lệ hoặc chứa tham chiếu để đối tượng định nghĩa rằng không thể tìm thấy .

Theo như tôi biết, lỗi này là kết quả của bản cập nhật bảo mật của Microsoft (Microsoft Security Advisory 960715). Khi thêm điều khiển ActiveX vào tập lệnh VBA, thông tin về các điều khiển được lưu trữ trong các tệp bộ đệm trên ổ đĩa cứng cục bộ (.exd-files). Bản cập nhật bảo mật đã sửa đổi một số điều khiển này, nhưng tệp .exd không được cập nhật tự động. Khi các kịch bản VBA cố gắng tải các phiên bản cũ của các điều khiển được lưu trữ trong các tập tin được lưu trữ, lỗi xảy ra. Các tệp bộ nhớ cache này phải được xóa khỏi ổ đĩa cứng để các điều khiển tải thành công (sẽ tự động tạo các tệp .exd mới, được cập nhật).

Điều tôi muốn làm là lập trình (sử dụng Visual C++) xóa các tệp .exd đã lỗi thời khi phần mềm của chúng tôi tải. Khi mở một dự án VBA bằng cách sử dụng CApcProject::ApcProject.Open Tôi đặt cờ sau: axProjectThrowAwayCompiledState.

TestHR(ApcProject.Open(pHost, (MSAPC::AxProjectFlag) (MSAPC::axProjectNormal | MSAPC::axProjectThrowAwayCompiledState))); 

Theo tài liệu, lá cờ này sẽ làm cho dự án VBA được biên dịch lại và các tệp tạm thời bị xóa và xây dựng lại. Tôi cũng đã cố gắng cập nhật tổng kiểm tra của thư viện kiểu ứng dụng máy chủ lưu trữ cần có cùng tác dụng. Tuy nhiên không ai trong số các sửa chữa này dường như làm công việc và tôi đang hết ý tưởng.

+3

Tôi sẽ sugest rằng trước tiên bạn hãy thử xóa các tệp .exd theo cách thủ công để xác minh rằng tệp đó giải quyết được sự cố của bạn (trước khi cố gắng thực hiện theo chương trình). Trong trường hợp của tôi, nó KHÔNG giải quyết được vấn đề. http://stackoverflow.com/questions/4495002/object-library-invalid-or-contains-references-in-excel-vba-with-datepicker – CaBieberach

+0

Nó có thể là vấn đề KillBit bạn đề cập đến, hoặc nó có thể là những thứ khác . Bạn đã nâng cấp từ x86 Office 2007 lên x64 Office 2010 chưa? Bạn đã kiểm tra tài liệu tham khảo VBA của mình cho các mục bị thiếu chưa? Bạn có gặp lỗi "Biên dịch lỗi trong mô-đun ẩn" không? Bạn đã xem lại http://blogs.msdn.com/b/vsod/archive/2009/06/05/visual-basic-6-controls-stop-working-after-security-advisory-960715.aspx chưa? Bạn đã bỏ chọn "Bỏ qua các ứng dụng khác sử dụng trao đổi dữ liệu động (DDE)" trong các tùy chọn Excel? Đồng ý với @CaBieberach, bạn có thể cần phải xác nhận rằng đây thực sự là vấn đề đầu tiên bằng cách xóa thủ công .exd. –

+0

Chúng tôi đã xác minh rằng việc xóa các tệp exd sẽ giải quyết được vấn đề (bằng cách thực hiện thủ công trên một số máy thử nghiệm). Vấn đề phát sinh khi nâng cấp lên phiên bản x86 của Office (chúng tôi không hỗ trợ Office 2010 x64 kết hợp với phần mềm của chúng tôi). Bây giờ, khi một khách hàng gặp vấn đề này, chúng tôi cho phép họ chạy một tập lệnh xóa tất cả các tệp exd. – aspartame

Trả lời

2

Tôi đã gặp sự cố này một vài lần trước đây và giải pháp được đề xuất (và hoạt động) thực sự là xóa tất cả các tệp .exd trên ổ đĩa hệ thống. Rõ ràng chúng được xây dựng lại bất cứ khi nào cần thiết, vì vậy không cần phải lập trình kích hoạt quá trình xây dựng lại.

+0

Vấn đề là tôi thực sự cần phải làm điều đó theo chương trình. Nhưng đã gần một năm mà không tìm được cách để làm điều đó nên tôi sẽ chấp nhận câu trả lời này và tiếp tục cuộc sống của mình;) – aspartame

Các vấn đề liên quan