2011-12-14 32 views
12

My Excel addin (XLL AddIn, gọi nó là MyAddIn) được tạo bằng C#, ExcelDNA, NetOffice, VS2010. Khách hàng có một addin khác (hãy gọi nó là B), tôi đoán nó được viết bằng VBA. Khách hàng nói B hoạt động tốt mà không cần MyAddIn. Khi MyAddIn được cài đặt, B thất bại với lỗi:Lỗi Excel 406 khi sử dụng cả hai bổ trợ VBA và ActiveX.

Error code: 406 Error message: Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control, or Property Page.

tôi đã thấy this Microsoft resource, nhưng tôi không muốn chỉ nói với khách hàng rằng B addin cần thay đổi. Tôi muốn làm điều gì đó để tránh điều này từ phía tôi.

Dưới đây là các bước báo cáo cho thấy các vấn đề:

  1. Khi B addin được cài đặt, nó không thực hiện bất kỳ mục đăng ký cho Microsoft Excel.
  2. Khi MyAddin được cài đặt, nó tạo một mục đăng ký cho Microsoft Excel.
  3. mục đăng ký ở đây về cơ bản nói rằng addin sẽ được mở khi Excel được khởi chạy, do đó, B addin không được khởi chạy, Excel hoạt động tốt, MyAddIn hoạt động tốt.
  4. Bây giờ khi B addin được khởi chạy, nó sẽ hiển thị lỗi 406 được hiển thị ở trên.
  5. Chúng tôi có thể bỏ qua lỗi và tiếp tục làm việc với phần bổ trợ B; vô hiệu hóa MyAddIn là giải pháp thay thế.
  6. Khi phần bổ trợ B được khởi chạy, chúng tôi thấy rằng MyAddIn được tải trước tiên trước khi bổ sung B và sau đó nhận được lỗi 406.
  7. Khi chúng tôi gỡ cài đặt MyAddIn, lỗi này không còn gặp phải và mọi thứ hoạt động tốt.
  8. Để xóa lỗi này, chúng tôi đã thử thay đổi thứ tự đăng ký để làm cho phần bổ trợ B luôn mở trước MyAddin.
    • Công trình này, nhưng sau đó thay đổi toàn cầu cho Microsoft Excel, nghĩa là B addin sẽ luôn mở, ngay cả khi chúng tôi khởi chạy chỉ Excel. Điều này là không mong muốn, vì không thể cho phép người dùng làm việc với dữ liệu tĩnh vì phần bổ trợ B làm mới thời gian thực. Đó là lý do add-in B không tạo mục nhập trong cài đặt đăng ký. Vì vậy, thay đổi đăng ký không phải là một lựa chọn. Chúng tôi không thể luôn mở B addin bất cứ khi nào Excel mở.
+1

Như đã đề cập trong thông báo lỗi, MyAddIn đang cố gắng hiển thị biểu mẫu không theo phương thức, gây ra sự cố. Bạn cần phải tìm ra hình thức của nó. Nó cũng sẽ giúp đỡ nếu bạn có thể đăng một số mã. – Tarik

Trả lời

1

Tôi không có câu trả lời, nhưng đây là một vài điều bạn có thể thử.

Bạn có thể biết loại bạn đang xử lý bằng cách thực hiện Tệp | Tùy chọn và chọn tab Thêm.

Nếu sự kiện xảy ra ngay khi bạn tải Addin B, điều đó có thể có nghĩa là bạn đang gọi một hộp thoại không theo kiểu như nó nói, nhưng có một số thứ khác có thể cho bạn lỗi tương tự.

Dựa trên mô tả của bạn, có vẻ như lỗi có thể là hộp thoại trong Addin của bạn hoặc có thể nằm trong addin khác và được gọi là tác dụng phụ của một số thay đổi trạng thái mà trình bổ sung của bạn đã thực hiện.

Để đến cuối trang, bạn cần đính kèm trình gỡ lỗi. Bạn có thể làm điều đó bằng cách tạo Excel cho Dự án khởi động của bạn hoặc bằng cách đính kèm sau. Trước đây có lẽ dễ dàng hơn trong trường hợp này.

  1. Trong Visual Studio, Sử dụng Dự án | Thuộc tính | Gỡ lỗi, chọn Bắt đầu chương trình bên ngoài và đặt tên đường dẫn đầy đủ vào Excel.

  2. tải Addin B bằng tay để cung cấp cho mình các lỗi

  3. lao vào gỡ lỗi và kiểm tra các cuộc gọi stack.

Điều đó sẽ thường xuyên nhưng không phải lúc nào cũng cung cấp cho bạn đầu mối tốt về vấn đề, nhưng đây luôn là bước đầu tiên. Nếu nó không cung cấp cho bạn thông tin hữu ích (thông tin ngăn xếp thường xuyên bị mất hoàn toàn trong quá trình chuyển đổi giữa các bổ trợ), bạn có thể muốn đặt một số điểm ngắt trong các dự án của mình trong bất kỳ sự kiện nào bạn xử lý. Ngay cả điều này không làm việc đáng tin cậy tất cả các thời gian, nhưng nó có giá trị một shot.

Nếu tôi phải đoán, tôi có thể nói có thể có một số trình xử lý sự kiện trong trình bổ sung của bạn đang gây ra sự cố và bạn có thể phải thực hiện một việc như thay đổi .Show thành `.ShowDialog 'hoặc trì hoãn xử lý các hình thức cho đến khi bên ngoài xử lý sự kiện nhưng đó chỉ là một đoán.

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