2010-02-26 5 views
0

Je développe un serveur COM à utiliser à partir d'Excel VBA. Lorsque je mets à jour le serveur (modifier le code, annuler l'inscription, réenregistrer) Excel semble continuer à utiliser la version originale du serveur COM, pas la version mise à jour. Le seul moyen que j'ai trouvé pour l'utiliser avec la version mise à jour est de fermer et rouvrir Excel, ce qui est un peu irritant. Existe-t-il un moyen de forcer Excel à utiliser la version nouvellement enregistrée (peut-être une sorte d'option "effacer le cache")?Comment forcer Excel VBA à utiliser le serveur COM mis à jour

Plus de détails:

Le serveur est développé en Python en utilisant win32com.

En VBA je fais quelque chose comme:

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

Où Foo.Bar est le serveur COM Je me suis inscrit dans le registre.

Si je désinscris le serveur, puis exécutez le code VBA, je reçois une erreur "ne peut pas créer d'objet" à partir de VBA, il doit donc se rendre compte que quelque chose se passe. Mais une fois que je l'ai réinscrit, il reprend l'ancienne version.

Des conseils appréciés!

Merci,

Andy

Répondre

1

que j'ai trouvé une solution à mon problème - l'idée générale est de mettre les choses en place afin que la classe principale du serveur COM charge dynamiquement le reste du code du serveur COM quand il est appelé . Donc, en Python, j'ai créé une classe de serveur COM qui ressemble à:

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) 

Le module main_code contient le code qui fait le travail réel et est rechargé chaque fois que la méthode COM est appelée. Cela fonctionne tant que les entrées ne changent pas. Il y aura vraisemblablement une pénalité d'exécution pour ceci, ainsi voudra peut-être enlever le rechargement pour la version finale, mais cela fonctionne pour des buts de développement.

0

Juste une suggestion, avez-vous essayé de Décharger l'objet? Peut-être créer un bouton dans votre Spredsheat Excel qui force à décharger l'objet.

J'espère que cela aide

+0

Malheureusement, Excel n'aime pas cela - "Impossible de charger ou de décharger cet objet". – Andy

Questions connexes