【发布时间】:2014-05-12 08:23:03
【问题描述】:
这是一种假设情况。
我想知道是否可以在文档级插件中将 C# 类公开给 VBA。
这是一个 SSCCE:
在 VS PRO 2012 中,我开始了一个新项目,Selected Office -> Excel 2010 Workbook。 (make sure you select .Net framework ver 4)
我在 Sheet1 中添加了一个DateTimePicker 控件。
我可以在 C# 解决方案中从 DateTimePicker 控件中设置/获取 .Value 属性,而不会出现问题。
调试时:在 VBA 中,.Value 属性不暴露。 (试过.OLEFormat.Object.Value)
并非所有属性都可以向 VBA 公开,因为 ActiveX 控件 DateTimePicker 由 MSForms 包装,因此 Excel 可以识别它(兼容性)。
我需要能够从 VBA 中获取包装控件的实际值,但我不确定如何去做(是否可能) ...
我知道控件本身支持事件,但这不是我想走的路。我希望能够从控件中获取静态/当前值。
这是我希望能够做到的:
向我的 C# 解决方案添加一个类
暴露它,这样它就可以像
Dim obj as new MyExposedClass一样从VBA重新创建然后让
MyExposedClass存储对DateTimePicker的引用,因为它出现在 C# 中(所有属性都可用)然后我可以定义一个函数
GetValue(string controlName),它从 C# POV 返回值
所以我发现this solution + (this one) 似乎适用于应用程序级插件,但不适用于文档级 加载项。
当我调试我的解决方案并打开 VBA 的对象浏览器时,我可以看到引用已自动添加到 Microsoft Visual Studio 2008 Tools for Office Execution Engine 9.0 Type Library,但我认为我不能为其添加额外的类。 ..
当我在 VBE 中打开引用时,项目中没有添加额外的引用,但在我的解决方案的 /debug 文件夹中有一个 ExcelWorkbook1.dll 那么它是如何附加到解决方案的?
所以我的问题是:
如何使用 C# 在 Excel 的文档级加载项中公开一个类,以扩展 .Net 控件上默认可访问的属性范围?
更新:
这是迄今为止我得到的最接近的,但它只允许您公开工作表、工作簿、图表等主机项目。它允许您调用方法,所以我将进一步调查并返回一些反馈
Calling Code in Document-Level Customizations from VBA
【问题讨论】:
标签: c# vba vsto add-in office-interop