2016-10-12 2 views
0

Je souhaite exécuter une macro vba avec IRibbonControl en tant que paramètre à l'aide de Python win32com.Comment faire pour exécuter une macro vba via Python win32com ayant comme paramètre IRibbonControl

Par exemple, mon sous vba est ressemble ci-dessous

Public Sub test(control As IRibbonControl) 

    blabla 

End Sub 

Et

Et puis sous test appelle Python à l'aide win32com. Que faut-il mettre sur les paramètres d'une fonction de test?

import os 
import win32com.client 

from win32com.client import DispatchEx 

xl = DispatchEx('Excel.Application') 
xl.Workbooks.Open("myexcelfile.xlsm") 

xl.Application.Run("test", some magic needs here) 
+1

Je pense que vous allez trouver cela difficile - si vous avez le contrôle de la VBA, il serait préférable de casser la fonctionnalité hors du gestionnaire de contrôle dans un sous-séparé que vous pouvez appeler en utilisant 'application.Run' –

Répondre

0

Vous auriez besoin d'un objet sur côté python qui implémente IRibbonControl et passer que le paramètre de retour vers Excel. La seule façon dont je peux imaginer cela est logique (mais j'ai l'esprit ouvert) si vous implémentez un complément COM (https://support.microsoft.com/en-us/kb/291392) comme IDTExensibility2. Ensuite, vous serez appelé la méthode OnConnection (dans votre serveur COM python), ce qui vous donne l'objet d'application Excel. À partir de là, vous pourriez très probablement obtenir une référence au contrôle du ruban.

Je dois avouer que je n'ai pas réussi à obtenir un add-in COM Excel python pour fonctionner, même si j'ai essayé.

Ou ne pouvez-vous pas mieux obtenir le IRibbonControl de l'application Excel à partir du sous-marin, et l'enlever de la liste d'arguments?

+0

impossible de supprimer cet argument de l'appel de méthode dans VBA, sans casser le complément. –