我刚刚对Powerpoint中从VBA调用的dll进行了更新。所有的开发都很顺利,但是当我尝试部署到其他用户机器时,我遇到了一个问题,我不知道如何调试。错误的对象从COM Callable Wrapper返回
会发生什么情况是,当在VBA中创建.Net对象时,返回的引用是错误的对象,所以下一行失败,找不到方法。
Dim myObj As Foo.Bar
Public Sub RefreshData()
//'instantiate object
Set myObj = New Foo.Bar
//'call a method
myObj.HelloWorld
最后一行失败,运行时错误“438”对象不支持此属性或方法这是由以下事实导致MyObj中是某种类型的“Wrong.Type”,而不是“ Foo.Bar”。
“Wrong.Type”也在程序集中,所以我认为类型库出了问题,但我尝试了重新生成(使用regasm/codebase/tlb MyLib.dll),并没有帮助。
我不知道如何进一步诊断。希望有人能列出一些关于如何诊断这类问题的步骤?
在这种情况下,删除对tlb文件的引用,然后再次添加它解决了问题。我仍然有兴趣知道我可以看到什么帮助诊断问题,即使盲目地刺伤我最终找到了解决方案 – Modan 2009-08-28 14:45:33
我遇到了类似的问题,但是在创建本机VBA类的实例时,没有参考添加/删除(请参阅:http://stackoverflow.com/questions/2677091/automating-excel-through-through-pia-makes-vba-go-squiffy) - 您是否进一步诊断此问题,以及如果有的话有什么建议?谢谢! – 2010-04-23 13:08:15
@Modan:你可以回答你自己的问题,然后接受你自己的答案,表示你已经找到你正在寻找的东西。 – adamleerich 2011-09-15 05:05:22