2016-10-12 2 views
0

Python win32comを使用してIRibbonControlをパラメータとして持つvbaマクロを実行したいとします。IRibbonControlをパラメータとして持つPython win32comでvbaマクロを実行する方法

例えば、私のVBAサブは

Public Sub test(control As IRibbonControl) 

    blabla 

End Sub 

そして

以下のように見えるし、その後Pythonはwin32comを使用してテストサブを呼び出します。

テスト関数のパラメータはどうしたらよいですか?

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

私はあなたがVBAのコントロールを持っているなら、あなたが 'application.Run'を使って呼び出すことができる別のサブブロックにコントロールハンドラの機能を壊すのが最善であると思っています。 –

答えて

0

あなたはIRibbonControlを実装のpython-側のオブジェクトを必要とし、Excelに戻って、パラメータとしてそれを渡します。

COMアドイン(https://support.microsoft.com/en-us/kb/291392)をIDTExensibility2として実装すると、これは意味があると思います。次に、あなたはExcelアプリケーションオブジェクトを与えるOnConnectionメソッド(あなたのpython COMサーバ内)と呼ばれます。

そこから、リボンコントロールへの参照が得られる可能性があります。

これまでのところ、python COM Excelアドインが自分自身で動作するように管理していなかったことを認めなければなりません。

また、サブ内からExcelアプリケーションからIRibbonControlを取得して、それを引数リストから削除しない方が良いでしょうか?

+0

アドインを壊すことなく、VBAのメソッド呼び出しからその引数を削除することはできません。 –

関連する問題