如何强制Excel VBA使用更新的COM服务器

问题描述:

我正在开发从Excel VBA使用的COM服务器。当我更新服务器(编辑代码,取消注册,重新注册)时,Excel似乎继续使用COM服务器的原始版本,而不是更新后的版本。我发现让它使用更新版本的唯一方法是关闭并重新打开Excel,这会让人有点恼火。有没有办法强制Excel使用新注册的版本(也许某种“清除缓存”选项)?如何强制Excel VBA使用更新的COM服务器

更多细节:

服务器正在使用Python开发win32com。

在VBA我做这样的事情:

set obj=CreateObject("Foo.Bar") 
obj.baz() 

哪里Foo.Bar是我在注册表中注册的COM服务器。

如果我取消注册服务器然后运行VBA代码,我从VBA得到一个“无法创建对象”的错误,所以它必须意识到发生了某些事情。但是,一旦我重新注册,它会提取旧版本。

任何提示赞赏!

感谢,

安迪

我已经找到了解决我的问题 - 的总体思路是:设置的东西,使主COM服务器类动态加载COM服务器代码的其余部分时,它被称为。所以,在Python我已经创建了一个COM服务器类,看起来像:

import main_code 

class COMInterface: 
    _public_methods_ = [ 'method1' ] 
    _reg_progid_ = "My.Test" 
    _reg_clsid_ = "{D6AA2A12-A5CE-4B6C-8603-7952B711728B}" 

    def methods(self, input1,input2,input3): 
     # force python to reload the code that does the actual work 
     reload(main_code) 
     return main_code.Runner().go(input1,input2,input3) 

的main_code模块包含执行实际工作,并且每个COM方法被调用时重新加载代码。只要输入不会改变,它就会工作。这可能是一个运行时间的惩罚,所以可能要删除最终版本的重新加载,但它适用于开发目的。

只是一个建议,你试图卸载对象?也许在你的excel spredsheat中创建一个强制卸载对象的按钮。

我希望它能帮助

+0

不幸的是,Excel不喜欢那样 - “无法加载或卸载此对象”。 – Andy 2010-03-01 01:29:51