2017-02-08 10 views
0

かなり複雑なExcelファイルを開くためにPythonを使用しています。スプレッドシートを開いてデータを入力し、マクロを実行する方法を管理しました。問題は、最後にこのマクロが結果のメッセージをユーザーにOKボタンをクリックする必要のあるメッセージボックスとして返すことで、ボタンが押されるまで続行しないことです。このプロセスを完全に自動化する必要があるので、Pythonから「OK」をクリックする必要があります。これどうやってするの?私がメッセージボックスからメッセージを読むことができれば素晴らしいだろうが、それは必要ではない。
ここ が私のコードです:PythonのExcelからメッセージボックスを閉じて(そして読む)

import win32com.client 
xl=win32com.client.Dispatch("Excel.Application") 
xl.Workbooks.Open(Filename="my_excel.xlsm") 
xl.Application.Run("'my_excel.xlsm'!my_macro") 

# here I need to click OK, but my code will never reach this place until I'll click it manually 

xl.Application.Quit() 
+0

メッセージボックスを返さないようにマクロを変更できますか? – sous2817

答えて

0

それは(あなたは混乱を避けるために、最初の場所でそれを明記してください)パスワードで保護されているので、あなたが実際のマクロコードを変更することはできませんと仮定すると、私の唯一の提案は何かをするだろうむしろこのような "アナログ" Controlling mouse with Python

+0

VBAはマシンの制御権を持っているため、これが動作するかどうかわかりません。 – sous2817

+0

私はあなたが正しいと思います。これを解決するには、2つのスレッドを作成する必要があります(http://stackoverflow.com/questions/2905965/creating-threads-in-python)。他のインジケータがない場合は、マクロが終了したことを時間カウンタベースで処理する必要があります。マクロが通常10分かかる場合、2番目のスレッドは10秒後に作業を開始し、毎分再試行する必要があります。あるいは、何らかの形でシステムメッセージボックスイベントをリッスンする方法がありますが、イベント処理も追加する必要があります。 Verは漠然としていますが、OPはマクロ自体を変更できるのかまだまだ述べていません... – and0r

関連する問題