我正在尝试制作一个可以从VBA(MS Office)访问的简单(无依赖项).NET dll文件.我正在使用VS2015 Express,并使我的dll成为最简单的方法:创建一个类库,添加一个简单的类,并检查“使程序集对COM可见”以及“注册COM互操作”选项.
我的C#代码:
namespace TestLib {
public class Hello {
public int timestwo(int i) {
return 2 * i;
}
}
}
该库在构建时自动添加到Windows注册表中.我可以从工具-> MS Office VBA编辑器中的引用以及以下VBA代码均按预期工作:
Sub test()
Dim h as TestLib.Hello
MsgBox h.timestwo(2)
End Sub
现在有趣的是:对象浏览器显示了我的类,但是没有成员函数!因此,自动完成功能不起作用…这是怎么回事?
解决方法:
嗯,在我看来,您对所做工作的描述缺少几个步骤.您需要GUID.您需要一个类需要实现的接口.并且您需要指定该类应如何与Interface一起使用.为了使Intellisense等正常工作,需要将其设置为“ None”类型.
这是我的.NET COM DLL的摘录,它确实出现在对象浏览器中,并在为VBA项目引用时提供Intellisense.
[Guid("149F7A5F-7DAC-4426-8AA0-28975A2CE203")]
[ComVisible(true)]
public interface ITest
{
string testLT(string FilePath, object Args);
string RemoveListTemplates(string FilePath, object Args);
void test(string arg);
}
[Guid("D86307C2-3FFA-4518-BABC-DA5F26ABC445")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class Test : ITest
标签:c,net,excel,vba,excel-vba 来源: https://codeday.me/bug/20191027/1943942.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。