【发布时间】:2018-03-23 08:46:11
【问题描述】:
我正在尝试从 VBA (Word/Excel) 的 .net 运行时调用对象。
这有效:
oT = CreateObject("System.Text.UTF8Encoding")
但不是这个:
CreateObject("System.Management.Automation.Runspaces.RunspaceFactory")
错误是:
运行时错误“429”; ActiveX 组件无法创建对象
我不明白的是 Excel/Word 如何确定哪些类公开,哪些不公开
【问题讨论】:
-
简单:Excel/Word 甚至不会远程参与。这是 VBE 的工作,而不是宿主应用程序的工作。
-
那么 VBE 如何知道什么是可访问的,什么是不可访问的?
-
只有 .NET 类的一个子集是 [ComVisible(true)]。主要是 .NET 1.0 中的东西,那时让程序员跟随 .NET 潮流而不是强迫他们重写他们所拥有的一切仍然很重要。您必须创建自己的 [ComVisible] 包装器。
-
@HansPassant 我把我的答案写成一个有根据的猜测(几年来一直在玩弄 Rubberduck 中的 COM 互操作),如果你能告诉我我的猜测,我会很高兴没错(哎呀,如果你愿意,可以偷那个复选标记)!
-
没关系,忘记UV了,抱歉。