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

命名規則について

リーダブルコードシリーズ第2段、名称について。 コードにおいては名称がとても大切で、正しい命名づけなどはなかなか難しいです。 以下に大事で重要だと思ったポイントを。 Contents1 具体的でわかり …

no image

プログラミングを習得するときに必要な2つの大事なこと

元々私は塾で仕事をしていましたが、いろいろ紆余曲折ありましていまではWEBエンジニアとして仕事をしております。 エンジニアとしてのキャリアは3年ぐらいなので正直あまりないのですが、開発者と平行してプロ …

no image

リーダブルコードまとめ

リーダブルコードほぼ読み切ったのでまとめを。チェックリスト化して、常にこれを見ながらコードは書いたほうがよさげ 前半のまとめや参考リンクでみたものとマージします。 Contents1 変数の名称2 コ …

no image

小〜中規模程度のWEBアプリ作成で気をつけるべきこと

初見の処理系(ライブラリ操作)などは休日などで最小パターンを確認しておくこと。実務で何時間も悩むと非常にストレスがたまる テーブル設計命。あとで終えるようにトレースができるような値を入れておくこと。 …

no image

オブジェクト指向設計 依存関係の管理

オブジェクト指向シリーズ。読みにくい本が多い中でオブジェクト指向設計実践ガイドは勉強になるなー。 Contents1 依存関係の管理1.1 メモ1.2 実際のコーディング上のコツ1.3 感想 依存関係 …