2

ルビーとWIN32OLEを使用して、WindowsスケジューラでExcelマクロの実行を自動化しています。

私はこれらすべてを適切に機能させています。私の問題は、外部関係者の Excel ファイルに埋め込まれたマクロを実行しなければならないことにあります (つまり、私はマクロを制御できません)。Msgbox問題なくマクロを呼び出すことができますが、コードには (ステートメントの形式で) ユーザー プロンプトが含​​まれています。

msgbox一言で言えば、 WIN32OLE 経由で「はい」または「OK」を伝えるにはどうすればよいですか?

私が試したこと

  • イベント処理: Msgbox はワークシート イベントをスローしません。Windows が Msgbox のどこかにイベントをスローすると考える必要があります (ただし、WIN32OLE でそれをキャプチャするのに十分なスキルがありません)。

- スレッド化と Sendkeys: また、msgbox を sendkeys に応答させることもできませんでした。さらに問題だったのは、スレッドを WIN32OLE オブジェクトで動作させることができなかったことです (マクロの実行をシミュレートするために puts と sleep を使用していたときは問題なく動作しました)。

コードを別のワークブックにコピーして msgbox ステートメントを削除することに行き詰まっているようです。サードパーティ コードのビジネス ロジックが変更されるたびにメンテナンス作業が追加されるため、実際にはそうしたくありません。

4

1 に答える 1

1

Autoit をインストールしてから実行する方法の 1 つ を次に示します。

au3 = WIN32OLE.new("AutoItX3.Control")
au3.ControlClick("MessageBox Title",'', 'OK')
于 2012-01-26T02:55:20.393 に答える