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

オブジェクト指向について その3

今回は場合分けによる変更コストとオブジェクト指向のメリットについてです。 例えば給付金が発生して、その金額を死亡時、退職時、通常時で場合分けするとき、if-elseで書けば下記のようになります。 [c …

no image

ユーザーに見せるエラーメッセージに関する考察

プログラムで難しいことの3つは テスト ログ エラーハンドリング とかいてきましたが、ユーザー側に見せるエラーメッセージについて考察して見ました。 Contents1 ログとエラーメッセージの違い2 …

no image

シェルの基礎+ユーザー切り替え関連

雑誌を見ていたらシェルの特集があったので、ちょっとメモリます。 補強したいところのみ要点をチェック。 Contents0.1 実行パスについて0.2 ビルドインコマンド0.3 シェル変数・環境変数0. …

no image

OSコマンドインジェクション

Contents1 OSコマンドインジェクションとは?2 被害3 対策4 参考リンク OSコマンドインジェクションとは? OSに対する命令文を不正に紛れ込ませて攻撃させる手法。 被害 サーバー内のファ …

no image

正規表現に関して

SQLネタをいろいろと書いておりますが、ちょっとワンポイント的なネタで正規表現について書きたいと思います。 平均的なものは知っているつもりでしたが、シェルの正規表現について知らなかったのでちょっとメモ …