3
A
回答
6
我假设你在谈论的Excel VBA到C#...
这里的,做它最小的C#类,在项目W默认名称ClassLibrary1的:
using System;
using System.Runtime.InteropServices;
namespace Tester
{
[ClassInterface(ClassInterfaceType.AutoDual)]
public class TestClass
{
public double D { get; set; } // simple property to get, set a double
public string S { get; set; } // simple property to get, set a string
}
}
和这里的VBA来尝试从类:
Private Sub foo()
Dim X As New ClassLibrary1.TestClass
X.S = "Hello"
Debug.Print X.S ' prints "hello"
X.D = 12
Debug.Print X.D ' prints a 12
End Sub
,这里是你需要做的,使这项工作的多余的东西:
(1) in C# Project...Properties...Build ==> check "Register for COM interop
(2) in C# Project...Properties...Application...Assembly Information ==>
check "Make assembly COM-visible"
(3) in VBA ... Tools ... References, browse to the C# bin output directory and select the "*.tlb" file
注:此方案可根据您添加到类什么失败 - 我不认为VBA会“看到” W比默认的构造函数其他静态类或类。您也无法将VB集合映射到.NET集合,但您可以来回传递基本类型(double,long)和基本类型的数组。此外 - 使用“自动模块”选项是一种廉价的方法来获取方法...容易入门,但效率较低,并公开所有方法。更好的实践(但更多的工作)将是建立你自己的接口。如果展开此TestClass的成员以包含您定义的其他类的实例,并且如果您同样通过AutoDual或手动编码的接口公开这些类方法,那么这些类和它们的(非重载)方法同样可见在VBA中(使用Intellisense)。
希望这会有所帮助。
相关问题
- 1. 从.NET传递到VBA的COM对象的对象生命周期
- 2. 将字符串[]作为对象引用传递给COM对象
- 3. 使用COM传递数组?
- 4. 通过互联网传递JSon对象?
- 5. 使用COM对象
- 6. 使用COM对象
- 7. 使用Segue传递对象
- 8. 使用didSelectRowAtIndexPath传递对象:
- 9. 从vba传递数组到c#使用com-interop
- 10. 通过互操作将VB6对象传递给.NET对象?
- 11. COM对象excel互操作清理
- 12. 反思COM互操作对象
- 13. 如何使用C与COM对象进行交互?
- 14. 错误使用对象数组.NET COM互操作DLL
- 15. ASP.NET会话和存储使用COM互操作的对象
- 16. 使用C序列化COM互操作对象#
- 17. 传递对象
- 18. 从COM库传递对COM接口的引用
- 19. 如何将C#接口传递给外部COM对象以供其使用?
- 20. VBA/C#COM互操作 - 错误430
- 21. 传递或返回COM流对象的流
- 22. 从C++传递对象到C#虽然COM
- 23. 将函数作为参数传递给COM对象函数
- 24. 你如何通过com传递一个C#对象?
- 25. 将无符号整数从C++ COM对象传递到VB6
- 26. 传递COM对象作为参数在C#
- 27. 传递数组从C#COM对象到JavaScript?
- 28. 传递对象使用泽西
- 29. 使用Ajaxpro传递日期对象
- 30. 传递继承的对象使用JSON
一个搜索止跌回升http://stackoverflow.com/questions/375457/cant-instantiate-a-com-object-written-in-c-from-vba-vb6-ok,这可能会感兴趣。 – Fionnuala 2011-02-16 22:15:02
只要你把它变成ComVisible,是的。 – 2011-02-16 22:24:44