通过引用this,我能够将Entities.tlb文件附加到VBA。但是我无法从C#中的类创建实例。这是我的代码,
C#类
namespace Entities
{
[Guid("1558C766-44DA-4DA5-BF2F-CBD6804E7E21")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface ITools
{
ABC GetABC();
}
[Guid("514719AC-E137-4FCA-82AF-73E4025A8625")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class Tools : ITools
{
public Tools()
{
}
public methods ...
}
}
从VBA,
Dim objElement As New Entities.Tools
这引起错误:无效使用新关键字
而且在VBA对象浏览器中,对于附加的Entities.tlb,它还会显示Entities命名空间下的所有类。但这并未在这些类中显示任何方法。
如何在VBA中创建Tools类的实例并从VBA中访问Tools类的方法?
删除构造函数。 VBA无法使用它们,而c#将透明地实现默认构造函数。
然后尝试上课
[ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(ITools))]
并且在界面中
只是
[ComVisible(true)]
然后在VBA中使用
Dim objElement as Tools set objElement = new Tools
我有一个可以从VBA访问的C#类,这是我发现的唯一一种在VBA中提供智能感知并仍然允许诸如GetEnumerator之类的项目正常工作的方法。
Kvp C# dictionary wrapper for VBA
[您还应该注意,如果您的类中有索引器,则.Item [x]语法仅在您选择不具有智能感知时才起作用。如果您具有智能,则使用.Item [x] = value将由于在为索引器构造中间语言方面存在错误而产生VBA错误。