通过引用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类中的方法?
发布于 2020-04-16 22:45:09
删除构造函数。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
您还应该知道,如果您的类中有索引器,那么只有在您选择不使用智能感知的情况下,.Itemx语法才会起作用。如果你有.Itemx=value,那么使用intellisense将会产生一个VBA错误,这是由于为索引器构造中间语言的一个bug。
https://stackoverflow.com/questions/61252780
复制相似问题