Đây là một tình huống giả định.Làm thế nào để trưng ra một lớp C# vào một mô-đun VBA trong một bổ trợ cấp tài liệu?
Tôi muốn tìm hiểu xem có thể hiển thị lớp C# với VBA trong bổ trợ cấp tài liệu hay không.
Dưới đây là một SSCCE:
Trong VS PRO 2012 Tôi đã bắt đầu một dự án mới, Selected Office -> Excel 2010 Workbook. (make sure you select .Net framework ver 4)
Tôi đã thêm điều khiển DateTimePicker
vào Sheet1.
Tôi có thể đặt/lấy thuộc tính .Value
khỏi điều khiển DateTimePicker
trong giải pháp C# mà không gặp sự cố.
Trong khi gỡ lỗi: Trong VBA, thuộc tính .Value
là không phơi sáng. (thử .OLEFormat.Object.Value
)
Không phải tất cả các thuộc tính có thể được tiếp xúc với VBA vì ActiveX kiểm soát DateTimePicker
được bọc bởi MSForms
để Excel nhận nó (tương thích).
tôi cần để có thể lấy giá trị thực tế của điều khiển bọc từ VBA, nhưng tôi không chắc chắn như thế nào đi về nó (cho dù đó là tốt hay không) ...
tôi biết rằng bản thân điều khiển hỗ trợ các sự kiện nhưng đây không phải là con đường tôi muốn thực hiện. Tôi muốn có thể lấy giá trị tĩnh/hiện tại ngoài một điều khiển.
Đây là những gì tôi muốn để có thể làm:
Thêm một lớp học để giải pháp C# tôi
Expose nó, vì vậy nó recreatable từ VBA như
Dim obj as new MyExposedClass
sau đó có
MyExposedClass
tham chiếu cửa hàng vàoDateTimePicker
như nó xuất hiện trong C# (tất cả các tài sản có sẵn)sau đó tôi có thể định nghĩa một hàm
GetValue(string controlName)
mà trả về giá trị gia tăng từ C# POV
Vì vậy, tôi tìm thấy this solution + (this one) dường như hoạt động với một ứng dụng cấp bổ trợ nhưng nó không hoạt động với một tài liệu cấp tài liệu bổ trợ.
Khi tôi gỡ rối giải pháp của tôi và Object Browser mở VBA của tôi có thể thấy rằng tài liệu tham khảo sẽ được tự động thêm vào
Microsoft Visual Studio 2008 Tools for Office Execution Engine 9.0 Type Library
nhưng tôi không nghĩ rằng tôi có thể thêm một lớp thêm để nó ...
Khi Tôi mở các tài liệu tham khảo trong VBE không có thêm tài liệu tham khảo thêm vào dự án nhưng trong thư mục/debug của giải pháp của tôi có một ExcelWorkbook1.dll
vậy làm thế nào nó thậm chí gắn liền với giải pháp?
Vì vậy, câu hỏi của tôi là:
Làm thế nào tôi có thể tiếp xúc với một lớp trong một tài liệu cấp add-in cho Excel bằng C# để mở rộng phạm vi tài sản tiếp cận theo mặc định trên điều khiển Net?
Cập nhật:
này là gần nhất tôi có cho đến nay nhưng nó chỉ cho phép bạn để lộ tài liệu chủ như Worksheet, Workbook, Chart vv Nó cho phép bạn gọi các phương pháp mặc dù vậy tôi sẽ để điều tra này hơn nữa và trở lại với một số thông tin phản hồi
Calling Code in Document-Level Customizations from VBA
How to: Expose Code to VBA in a Visual C# Project
Walkthrough: Calling Code from VBA in a Visual C# Project