Tag: 办公室互操作

如何将C#类公开给文档级外接程序中的VBA模块?

这是一个假设的情况。 我想知道是否可以在文档级外接程序中将C#类暴露给VBA。 这是一个SSCCE: 在VS PRO 2012中,我启动了一个新项目, 选定办公室 – > Excel 2010工作簿 。 ( 确保选择.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 Dim obj as new MyExposedClass 然后让MyExposedClass存储对DateTimePicker引用,因为它出现在C#中(所有属性都可用) 然后我可以定义一个函数GetValue(string controlName) ,它返回C#POV中的Value 所以我发现这个解决方案 +( 这个 )似乎适用于应用程序级外接程序,但它不适用于文档级外接程序。 当我调试我的解决方案并打开VBA的对象浏览器时,我可以看到引用被自动添加到Microsoft Visual Studio 2008 […]