无法在vba中实例化.net对象

时间:2014-06-03 19:27:11

标签: .net vb.net vba com instantiation

我在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。

有人可以帮忙吗?对不起,这是我第一次编译加载项,我认为它必须简单。但在我看来,这个过程并没有很多指导或明确。

感谢。

1 个答案:

答案 0 :(得分:0)

到目前为止,我所看到的仅仅是从vba中的vb.net插件中实例化一个对象,是:

  1. 您必须显式声明类构造函数(Sub New())) - 不能让vb.net隐式地对其进行管理。

  2. 构造函数不能是Private(所以我认为这会干扰静态和单例类模式)。

  3. 构造函数不能接受参数(如评论中所述,谢谢)。

  4. 构造函数不能“太多”。我还没弄明白太多了。

  5. 我的构造函数代码已复制并从VBA转换。当然没有争论。它工作得很好。实例化了一些私有的类级别词典(位于属性之后)。通过调用类的Let Properties将一些默认元素添加到这些字典中。也许称这些房产太过分了。起初我怀疑我在构造函数中根本没有任何代码。但那不是它。我已经测试了代码,引用构造函数的本地变量和类的私有。但到目前为止只有价值类型。我想我应该等待在回答之前试图嗅出构造函数中的确切断点 - 但我已经厌倦了重建和重新启动,并且需要继续使用粗略的工作草案。

    我确信vb.net构造函数,仅在.net的上下文中,可以完成vba构造函数可以做的所有事情。似乎在.net和com与vba的相互作用中,有一些障碍。我没有在网上找到任何关于这个问题的讨论。所以也许它只是我系统中的一个错误。或者也许大多数人使用c#而不是vb,而c#效果更好。或者 - 我不知道。