GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBAを極める−VBAスーパーテクニック
  ExcelVBAからリボンを最小化してみよう!2
 
■ エクセルマクロでリボンは最小化できるか?

前回、XMLマークアップを使用したリボンUIのカスタマイズ例についてご紹介しましたが、今回はいよいよ、ExcelVBAから直接リボンUIを制御するサンプルコードをご紹介します。

VBAを利用したリボンUIの最小化テクニック

Excel2007のVBAヘルプをご覧になればすぐにわかると思いますが、リボンUIに対する制御文はほとんどありません。
リボンUIそのものがExcelのシステムから切り離されてしまったため、当然ExcelVBAからは制御できないのですが…IRibbonUIのようなCOMアドインのコールバックプロシージャから返されるオブジェクトを、制御するためのメソッドがわずかに存在するだけです。
(先ほどの方法ではドキュメント単位でしかUIを変更できませんでしたが、COMアドインを使うとアプリケーションレベルでのUI変更が可能になります)

現在のリボンUIの表示状態(通常表示か最小化されているか)を識別するプロパティも、リボンUIの状態を変化させるメソッドもなんにもありません。
困っちゃいましたね。

かなり無理矢理ですがリボンUIを操作するマクロを記述してみます。

Public Sub test()
  If Application.Version = 12 Then
    If ChkRibbonUI Then
      Call ChangeRibbonUIStatus
    End If
  End If
End Sub

Public Function ChkRibbonUI() As Boolean
Dim A1_Top1 As Long
Dim A1_Top2 As Long
  Call ChangeRibbonUIStatus
    A1_Top1 = ActiveWindow.PointsToScreenPixelsY(0)
  Call ChangeRibbonUIStatus
    A1_Top2 = ActiveWindow.PointsToScreenPixelsY(0)

  If A1_Top1 > A1_Top2 Then
    If A1_Top2 < 0 Then
      ChkRibbonUI = True
    Else
      ChkRibbonUI = False
    End If
  Else
    If A1_Top1 > 0 And A1_Top2 > 0 Then
      ChkRibbonUI = True
    Else
      ChkRibbonUI = False
    End If
  End If
End Function

Public Function ChangeRibbonUIStatus()
  Application.SendKeys Keys:="^{f1}", Wait:=True
  DoEvents
End Function

早速、プログラムの詳細をみていきます。

testプロシージャは、現在のリボンUIの状態を調べ、リボンが通常表示されていれば最小化を実行します。
(最小化しているときに通常表示させたい場合は2行目をIf Not ChkRibbonUI Then に変更すればOKです)

If Application.Version = 12 Then この操作はExcel2007で必要な操作なのでそれ以外のバージョンのExcelでは実行されないようにバージョン指定をしています。

If ChkRibbonUI Then リボンUIの状態を調べるChkRibbonUI関数を判定しています。ChkRibbonUIの戻り値がTRUEのときリボンが通常表示されており、FALSEのとき最小化されています。

Call ChangeRibbonUIStatus ここでリボンの状態を変化させます。中身はなんてことはない、SendKeysメソッドで「Ctrl+F1」を送ってやっているだけです。
リボンUIの通常表示・最小化を切り替えるショートカットキーが「Ctrl+F1」なので、アプリケーションにそれを送ってやれば、当然リボンUIの状態を切り替えてくれるわけです。

ここで問題になるのは、いまリボンがどんな状態なのかを直接調べる方法がないということです。リボンの状態がわからなければ、状態を切り替えていいかどうかの判断ができません。
かなりアクロバッティックな方法ですが、リボンUIのON・OFFを繰り返しその時のA1セルのスクリーン座標を調べることで判定してみましょう。

Function ChkRibbonUI の3〜6行目の箇所がそれにあたります。
Call ChangeRibbonUIStatusを繰り返し、その時点でのA1セルのY座標をA1_Top1、A1_Top2にそれぞれ取得しています。

あとはA1_Top1とA1_Top2の大小を比較することでリボンUIの状態を推測しています。


リボンUIを表示した状態でtestプロシージャを実行してください。リボンが最小化されましたね。
もう一度、testプロシージャを実行してみてください。リボンは最小化されたままですね。ChkRibbonUI関数は正しくリボンの状態を取得しているということになります。
(このプログラムはVBEからではなくエクセルから実行してください)

手動でリボンを元に戻したいときは、Ctrl+F1または、メニュー右クリック「リボンの最小化」チェックを外します。


今回のサンプルは筆者の環境でテストして概ね良好に動作しましたが、すべての環境で動作することを保証するものではありません。

筆者のテスト環境(スクリーンサイズ)
800 X 600
1024 X 768
1280 X 1024
2560 X 1024

ディスプレイ環境によってはうまく動作しない場合もありますのでご了承ください。



この方法の長所は、あくまでExcelVBA側からの制御ですので、XMLを編集する必要も、COMアドインを用意する必要もないことです。
旧バージョンのブックからでも、互換モードで動作させることができます。
(バージョン指定をしていたのはそのためです)

操作できるのはあくまでリボンUIの通常表示・最小化の切り替えのみですが、作業領域を確保するためにツールバー等を非表示にしていた、旧バージョンのエクセルマクロを暫定的にExcel2007で運用する場合に、使えるテクニックではないかと思います。

 

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,