我剛剛對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