skillup

技術ブログ

プログラミング全般

ExcelVBAでの他のアプリの起動

投稿日:

2日続けてExcelVBA。

やはり細かく分けてすぐにプロシージャごとにテストできるのはものすごく大きなメリットですね。本日は別のアプリ起動と操作に関して。

自分がやったことはWordとメモを起動してファイルパスを渡し、印刷設定をして、一括印刷、ということなんですが、別アプリだけに起動や操作が大変。

とりあえずの起動

メモ帳

下記コマンドで実行します。

ステータスにあたるものは起動したときの表示(最大化や最小化など)方式などの違いによるものです。詳しくはリンクを。

shell関数に関して

Word

操作

Wordはそのままコマンドがあったりするのですが(おそらくは同じMicrosoftなので共通の処理ができることを前提としているのでしょう。)、メモ帳に関しては完全に別のソフトになりますので、直接メソッドなどで命令をすることができません。

今回行いたかったのは印刷の細かい設定なので、直接制御するためには印刷設定のプロパティをいじらないといけません(両面印刷などの)。ただWindowsの印刷設定の細かい情報は見つけられなかったので今回私がとった方法はキー操作自体をExcelVBAにさせるということですね。※SendKeysという命令です。

SendKeysステートメント その1

SendKeysステートメント その2

要するにTABキーを2回おして、そのあとスペースを押すとか、そういう処理をExcelにさせるようにしました。

この方法は結構不安定で、以下のような欠点があります。

  1. ある動作が終わり切らないうちに次の動作が起こってしまうと、次の動作は当然受け付けられない。(SendKeysはコマンドの実行であって処理が終わったかは分からないからです。)
  2. イレギュラーなイベント(印刷中に紙がなくなって別のポップアップが上がってしまい、アクティブになる)

上記のような欠点がありますが、1に関してはもう実際に動かして重そうな処理は下記コマンドで待つようにしました。

アプリケーションを起動し動作させる 《Shell・SendKeys・Wait》

2に関してはこういったイベントを検知できるのか、いなかの調査をいまだしています。

何とか正常処理をされたという記録がとれればいいのですが、それができない場合、マクロ自体を強制終了させるしかなさそうですね・・・

-プログラミング全般

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

画面テストのツールに関して

Unitテストに関してはxUnit一択だと思いますが、UI系のテストツールについて。 IDE(コードを書かずにすむマクロ系)に関して全てChromeで動くことを確認しています。 Contents1 ツ …

no image

読みやすいコードについて

コードリーディングにおいて聖典となっているリーダブルコードについて読んでいこうかと。 ただ読んでいくだけではつまらないので、自分なりの考え方も書いていきます。 Contents1 優れたコードの定義1 …

no image

データ構造の基礎知識 中編 ハッシュ

前回の続きです。 前回は配列、連結リストについて学習したので今回はハッシュについて学習します。 Contents1 ハッシュとは?1.1 メリット1.2 デメリット ハッシュとは? key-value …

no image

テストコードを読みやすくする

リーダブルコードも最終章に近づいてきましたね。 今回はテストコードについて。 以前のプロジェクトではテストコードを書いていたのですが、今携わっているプロジェクトでは書いてないです・・・ テストを書く目 …

no image

コードの抽象化

リーダブルコードも終盤に少しずつ近づいてきました。 今まではどちらかというとコードの点や線の技術に注目してきましたが、これからは面的な要素に注目していきます。 リーダブルコードでは「無関係の下位問題を …