Excel2007 VBA:リボンを(ちょっぴり)操作

少し前の話ですが、仕事でVBのフォームからExcelを起動して帳票を出力するプログラミングを任されました。
そのときに、「出力完了後に自動でリボンのアドインタブを選択してほしい」という要望がでてきました。

ただ困ったことにVBAからリボンを触ることはほとんどできません。
なんとか2003でツールバーに関する処理で、アドインタブの中身の変更ができる程度です。

いろいろと調べて、
Excelのショートカットキーから多少の操作はできるようなのでご紹介します。
以下の方法ではタブの選択やボタンの押下等の簡単な動作しかできないので注意してください。



Excelが起動している状態で、「ALT」キーをクリックすると下の画像のように、タブに対応するショートカットキーが表示されます。


ここで表示されているショートカットキーを押下すれば対応のタブを選択できます。
たとえば「L」キーを押下すれば、開発タブが選択状態となります。


ここから更にキーを押して動作させることができます。

最後に後片付けとして「ALT」キーを押下すれば、ショートカットキーの表示は消えます。



これと同じ処理を行えば、タブの選択程度のことはできるようになります。
下記がサンプルコードになります。
'開発タブを選択
SendKeys "%L%"
SendKeysは「ALT」キー、「L」キー、「ALT」キーを順番にExcelに送信している処理です。
「%」は「ALT」キーをあらわしています。

更に送信するキーを多くしてコントロールを実行することもできます。
'開発タブを選択し、マクロの記録を実行する
SendKeys "%LR%"
動作がうまくいかない場合は、下記のようにSendKeysを分けて書くとうまく行くことがあります。
'うまく動作しない場合はSendKeysを分けて書くと良いです
SendKeys "%"
SendKeys "L"
SendKeys "R"
SendKeys "%"

※ちなみにVBEからデバッグでSendKeysを実行すると、VBEにキーが送信されてしまうので気をつけてください。
デバッグはExcelシートにボタン等を追加して試したほうが良いかと思います。
WorkBook.ActivateしてからSendKeysすればいいのかもしれませんが、そういえば試してませんでした。(汗


コメント
IAccessibleを使ってみては?↓

http://www.ka-net.org/ribbon/ri14.html
  • noname
  • 2009/05/26 12:06 PM
>nonameさん
情報ありがとうございます!
こんなものがあったんですね!
だいぶ調べたつもりでしたが気づきませんでした(汗

ただ残念なことに…
現在Office2007を使える環境がなくなってしまって試せません;
仕事ではOffice2000で作ったものをOffice2007に移行させるっていう内容だったんですが
2007に移行したら極端に処理速度が遅くなるものがあったので
結局2003にダウングレードすることになってしまったので…(汗

次にリボンの操作が必要になった場合があったら参考にさせていただきたいと思います!
  • 謎猫
  • 2009/05/27 12:51 AM
謎猫さん、nonameさん情報ありがとうございます。
とっても助かりました m(_ _)m

ただSendKeysはシート選択時に使ったせいか、一瞬目的のタブをアクティブにした後、ホームタブに戻ってしまいました。
  • yui
  • 2010/07/01 1:04 PM
コメントする








    
この記事のトラックバックURL
トラックバック