我在visual studio express 2010,vb.net中创建了一个类库项目。
我检查了Project / Application / Assembly Information / Make assembly COM-Visible。
我建造了这个项目。
我将myproject.dll和myproject.tlb复制到C:\ WINNT \ system32
我运行了C:\ WINNT \ Microsoft.NET \ Framework \ v4.0.30319 \ RegAsm.exe myproject.dll / codebase。 (我得到“警告RA0000”,但后来“注册成功的类型”。)
我查看了注册表,并在HKEY_Classes_Root / CLSID和/ classname以及/ TypeLib中找到了我的类的键。
在VBA编辑器的Excel中,我转到Tools / References,并在system32文件夹中添加对tlb文件的引用。 (该引用未出现在项目管理器的References文件夹中。)
在VBA中,我写道:
Dim y as string
Dim x as myproject.myobject
set x = New myproject.myobject
y = x.testfunction(Input:="Hi")
Intellisense识别myproject,在输入我的项目后,它还会提示我所有的班级名称。在方法调用上,方法名称和参数名称都自动大写。
当我单步执行代码时,
set x = New myproject.myobject
我收到错误:运行时错误'-2146233065(80131517)':自动化错误
如果我将x声明为Variant,我可以使用我的一些类来实例化和访问成员。与其他人我得到同样的错误。
我还在excel应用程序文件夹中尝试了使用Excel.exe.config文件和.net版本的hack。
有人可以帮忙吗?对不起,这是我第一次编译加载项,我认为它必须简单。但在我看来,这个过程并没有很多指导或明确。
感谢。
答案 0 :(得分:0)
到目前为止,我所看到的仅仅是从vba中的vb.net插件中实例化一个对象,是:
您必须显式声明类构造函数(Sub New())) - 不能让vb.net隐式地对其进行管理。
构造函数不能是Private(所以我认为这会干扰静态和单例类模式)。
构造函数不能接受参数(如评论中所述,谢谢)。
构造函数不能“太多”。我还没弄明白太多了。
我的构造函数代码已复制并从VBA转换。当然没有争论。它工作得很好。实例化了一些私有的类级别词典(位于属性之后)。通过调用类的Let Properties将一些默认元素添加到这些字典中。也许称这些房产太过分了。起初我怀疑我在构造函数中根本没有任何代码。但那不是它。我已经测试了代码,引用构造函数的本地变量和类的私有。但到目前为止只有价值类型。我想我应该等待在回答之前试图嗅出构造函数中的确切断点 - 但我已经厌倦了重建和重新启动,并且需要继续使用粗略的工作草案。
我确信vb.net构造函数,仅在.net的上下文中,可以完成vba构造函数可以做的所有事情。似乎在.net和com与vba的相互作用中,有一些障碍。我没有在网上找到任何关于这个问题的讨论。所以也许它只是我系统中的一个错误。或者也许大多数人使用c#而不是vb,而c#效果更好。或者 - 我不知道。