機能① どの図からマクロが呼び出されたのかを知る
マクロを図に登録してから、その図をクリックすると、登録したマクロが呼び出されますが、
同じマクロを複数の図に登録した場合に、どの図がクリックされたのかを知りたいことがあります。
そんな場合に、Application.Caller
プロパティを参照すれば、クリックされた図の名前を取得できます。
機能② キーボードからのキー入力を再現する
キーボードからのキー入力は、Application.SendKeys
メソッドで再現できます。
これを使えば、VBAから直接コントロールできないアプリケーションでも、そのショートカットキーをApplication.SendKeys
メソッドで送ることで、間接的にコントロールできます。
例えば、電卓を起動してから、イミディエイトウィンドウにAppActivate "電卓" : SendKeys 1024 & "{=}", True
を入力して実行すると、電卓に1024を表示することができます。
(※電卓を起動してから数秒待たないと、実行時エラーが発生することがあります。)
機能③ [マクロの記録]ではコードが生成されない場合がある
[マクロの記録]を使っても、機能によっては、何もコードが生成されない場合があります。
そんな場合でも、Application.CommandBars.ExecuteMso
メソッドを使って、機能のID(「コントロールID」と呼ぶ)を送れば、機能を実行できるようです。
例えば、図のサイズを[リセット]するコードは、[マクロの記録]を使ってもコードが生成されませんが、Application.CommandBars.ExecuteMso
メソッドを使えば、図のサイズを[リセット]するコードが書けます。
機能④ WorksheetFunction
が使えない場合がある
VBAの関数を使うよりも、WorksheetFunction
を使う方が、プログラムの実行速度は速くなるらしいけど、中には実行時エラーが発生して、使えない関数もあります。
そんな場合でも、Application.Evaluate
メソッドを使えば、同じ関数をエラーなしで実行できるようです。
また、Application.Evaluate
メソッドを簡略化した書き方として、[]
という(糖衣)構文が用意されているので、便利そうです。
機能⑤ その他
Application
オブジェクトには、他にも便利なメソッドやプロパティがあるようです。
(一覧を眺めるだけでも、勉強になりそう。)