2014/01/17

Excel からAeroSnapを実行する~マルチ ディスプレイを活用

以前「Windows 7/8 AeroSnapの使い方~ウィンドウの移動とか」をご紹介しましたが、今回はマルチ ディスプレイ環境におけるExcelからAeroSnap(エアロ スナップ)を実行する方法をメモ。
Technet フォーラムでの質問を私なりに解釈しサンプルを作ってみました。
もっといいアイディアをお持ちの方がいらっしゃいましたら、是非コメントをお願いします。

こんな時に使いたい

  1. マルチ ディスプレイ環境を構築
  2. マクロ付エクセル1を起動
  3. エクセル1からマクロ付エクセル2を起動
  4. エクセル1はメイン ディスプレイに最大化して表示
  5. エクセル2はサブ ディスプレイに最大化して表示
2014-01-16 21.46.31
Excelを複数起動し各ディスプレイにWorkbookを自動的に配置する前作業を簡略化、パンチャーには入力業務にだけ集中してもらえるのではないかなと。
「たったこれだけの作業なら手動で出来るだろう!?」とお思う方、それが普通の考え方です。
それであっています!
しかし、実際の現場ではこれさえも嫌がるユーザが多かったりします。本当に・・・

サンプルの説明

サンプルを作りました。
開発環境は、Windows 8.1 Pro 64bit + Excel 2013 32bit
※Windows 7 Pro SP1 64bit + Excel 2013 32bitでもテスト、問題ありません。
ファイルは、test01.xlsmとtest02.xlsmの二つになります。
http://sdrv.ms/1m8NS8d
VBAはtest01.xlsmのみのため、test02は.xlsxでもいいはずです。
サンプルのVBAは下記の通り動作します。
  1. test01.xlsmとtest02.xlsmをデスクトップに配置(手動で)
  2. test01.xlsmを起動
  3. シート1の[Open]ボタンをクリック
  4. test02.xlsmを起動
  5. test02.xlsmをサブ ディスプレイに移動、かつ、最大化
  6. test01.xlsmをアクティブ、かつ、最大化
サンプル終了ボタンの動作は下記の通り。
  1. test02.xlsmをチェック、あれば保存し終了
  2. test01.xlsmを保存、終了
この終了処理を行う事で、次回Excelを起動するとtest01.xlsmはメイン ディスプレイで起動します。

サンプルの詳細説明

ExcelからAeroSnapを実行する処理は[keybd_event]関数を使いました。
keybd_event 関数 - msdn
Applicatin.SendKeysを使用しAeroSnapの最大化([Win]+[↑]キー)”^{ESC}{UP}”を送信しましたが、[Win]キーのみ処理されるため、[keybd_event]関数を使った次第です。
[keybd_event]関数を使用したAeroSnapの処理は下記のようになります。

'--標準モジュール内
Public Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, _
                                          ByVal bScan As Byte, _
                                          ByVal dwFlags As Long, _
                                          ByVal dwExtraInfo As Long)

Public Const VK_WIN = &H5B
Public Const VK_LSHIFT = &HA0
Public Const VK_LEFT = &H25
Public Const VK_UP = &H26
Public Const VK_RIGHT = &H27
Public Const VK_DOWN = &H28
Public Const KEYEVENTF_KEYUP = &H2

'--クリック イベント内
'最大化
keybd_event VK_WIN, 0, 0, 0
keybd_event VK_UP, 0, 0, 0
keybd_event VK_UP, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_WIN, 0, KEYEVENTF_KEYUP, 0

'標準状態 or 最小化
keybd_event VK_WIN, 0, 0, 0
keybd_event VK_DOWN, 0, 0, 0
keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_WIN, 0, KEYEVENTF_KEYUP, 0

'左半分に最大化
keybd_event VK_WIN, 0, 0, 0
keybd_event VK_LEFT, 0, 0, 0
keybd_event VK_LEFT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_WIN, 0, KEYEVENTF_KEYUP, 0

'右半分に最大化
keybd_event VK_WIN, 0, 0, 0
keybd_event VK_RIGHT, 0, 0, 0
keybd_event VK_RIGHT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_WIN, 0, KEYEVENTF_KEYUP, 0

'サブ ディスプレイに移動/メイン ディスプレイに戻る
keybd_event VK_WIN, 0, 0, 0
keybd_event VK_LSHIFT, 0, 0, 0
keybd_event VK_RIGHT, 0, 0, 0
keybd_event VK_RIGHT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_LSHIFT, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_WIN, 0, KEYEVENTF_KEYUP, 0

今回参考にさせてもらったサイト

スポンサーリンク

スポンサーリンク