1.1 新しいメニューを追加する
突然ですが、右図のようにメニューバーに自分だけの新しいメニューを作りたいことはありませんか?
というわけで、メニューバーに自分だけのメニューを追加する方法を紹介します。なお、VBAを使ってメニューバーのカスタマイズを行うときは、
Microsoft Office 1x.0Object Library
の
参照設定
を行うことをオススメします。
メニューを作る
まずは、新しいメニューを追加する方法です。上の図でいうと「メニュー1」というメニューをメニューバーに追加するところまでです。
メニューを追加するときは、コマンドバーというオブジェクトを使います。例では、
Application.CommandBars("Menu Bar")
で作成し、コマンドバー型の変数
cbrCmd
へセットしています。
メニュー作成の準備(コマンドバーオブジェクトの作成)が整ったら、次はメニューの追加です。コマンドバーオブジェクトの
Controls.Add()
メソッドでメニューの追加です。そのときに、追加するものが何者かを引数で指定しますが、メニューのときは
Type:=msoControlPopup
を指定しましょう。なお、追加した結果はオブジェクトとして
cbcMenu
にセットしておきます。
そして、最後にメニューの表題を設定(
cbcMenu.Caption
へ設定)すれば、設定した表題でメニューが表示されます。
Sub prcAddNewMenu()
On Error GoTo ErrHand
Dim cbrCmd As CommandBar
Dim cbcMenu As CommandBarControl
'メニュー用のオブジェクトを作ります
Set cbrCmd =
Application.CommandBars("Menu Bar")
'作成済みであればいったん削除します
'存在しないとエラーが出ますが、On Error…で回避しています
cbrCmd.Controls("
メニュー1
").
Delete
'メニューを追加し、表題を設定します
Set cbcMenu = cbrCmd.
Controls.Add(Type:=msoControlPopup)
cbcMenu.
Caption
= "
メニュー1
"
Set cbrCmd = Nothing
Set cbcMenu = Nothing
Exit Sub
ErrHand:
If Err.Number = 5 Then
Resume Next
Else
MsgBox Err.Description
End If
End Sub
メニューの中にボタンを作る
次に、作ったメニューの中にボタンを追加する方法です。最初の図でいうと「ボタン1」や「ボタン2」が該当します。
メニューの中にボタンを追加するときは、
CommandBarControl
オブジェクト(
cbcMenu
)の
Controls.Add
を実行します。そのときに、追加するものが何者かを引数で指定しますが、メニューのときは
Type:=msoControlButton
を指定しましょう
ボタンを追加したら、ボタンの表題を
Caption
で設定し、そのボタンがクリックされたときに実行する
マクロ
を
OnAction
へ指定するだけです。なお、
VBAの処理を実行したいとき
は、マクロの
アクション「プロシージャの実行」
を使います。
以下の例では、ボタン1とボタン2の2つのボタンを追加しています。
Sub prcAddNewMenu()
On Error GoTo ErrHand
Dim cbrCmd As CommandBar
Dim cbcMenu As CommandBarControl
'メニュー用のオブジェクトを作ります
Set cbrCmd = Application.CommandBars("Menu Bar")
'作成済みであればいったん削除します
'存在しないとエラーが出ますが、On Error…で回避しています
cbrCmd.Controls("メニュー1").Delete
'メニューを追加し、表題を設定します
Set
cbcMenu
= cbrCmd.Controls.Add(Type:=msoControlPopup)
cbcMenu.Caption = "メニュー1"
'メニューの中にボタン「ボタン1」を追加します
With
cbcMenu.Controls.Add(Type:=msoControlButton)
.
Caption
= "
ボタン1
"
.
OnAction
= "
メニューマクロ!ボタン1
"
End With
'メニューの中にボタン「ボタン2」を追加します
With
cbcMenu.Controls.Add(Type:=msoControlButton)
.
Caption
= "
ボタン2
"
.
OnAction
= "
メニューマクロ!ボタン2
"
End With
Set cbrCmd = Nothing
Set cbcMenu = Nothing
Exit Sub
ErrHand:
If Err.Number = 5 Then
Resume Next
Else
MsgBox Err.Description
End If
End Sub
■マクロの作成
サブメニューを追加する
今度は、作ったメニューの中にさらにメニューを追加する方法です。最初の図でいうと「メニュー2」が該当します。
メニューの中にメニューを追加するときは、親となるメニューオブジェクトを使い
Controls.Add(Type:=msoControlPopup)
で子メニューオブジェクト(例では
cbcMenu2
)を作ります。子メニューの中へ、ボタンやメニューを作るときは、作ったオブジェクトを使い
Controls.Add()
で目的の物を追加すればOKです。
以下の例では、メニュー2とその中へボタン2-1、それとメニューへボタン3を追加しています。
Sub prcAddNewMenu()
On Error GoTo ErrHand
Dim cbrCmd As CommandBar
Dim cbcMenu As CommandBarControl
Dim
cbcMenu2
As CommandBarControl
'メニュー用のオブジェクトを作ります
Set cbrCmd = Application.CommandBars("Menu Bar")
'作成済みであればいったん削除します
'存在しないとエラーが出ますが、On Error…で回避しています
cbrCmd.Controls("メニュー1").Delete
'メニューを追加し、表題を設定します
Set
cbcMenu
= cbrCmd.Controls.Add(Type:=msoControlPopup)
cbcMenu.Caption = "メニュー1"
'メニューの中にボタン「ボタン1」を追加します
With cbcMenu.Controls.Add(Type:=msoControlButton)
.Caption = "ボタン1"
.OnAction = "メニューマクロ!ボタン1"
End With
'メニューの中にボタン「ボタン2」を追加します
With cbcMenu.Controls.Add(Type:=msoControlButton)
.Caption = "ボタン2"
.OnAction = "メニューマクロ!ボタン2"
End With
'メニューの中にメニュー「メニュー2」を追加します
Set
cbcMenu2
= cbcMenu.Controls.Add(Type:=msoControlPopup)
cbcMenu2.Caption
= "メニュー2"
'メニュー2の中にボタン「ボタン2-1」を追加します
With
cbcMenu2.Controls.Add(Type:=msoControlButton)
.Caption = "ボタン2-1"
.OnAction = "メニューマクロ!ボタン21"
End With
'メニューの中にボタン「ボタン3」を追加します
With cbcMenu.Controls.Add(Type:=msoControlButton)
.Caption = "ボタン3"
.OnAction = "メニューマクロ!ボタン3"
End With
Set cbrCmd = Nothing
Set cbcMenu = Nothing
Set cbcMenu2 = Nothing
Exit Sub
ErrHand:
If Err.Number = 5 Then
Resume Next
Else
MsgBox Err.Description
End If
End Sub
Access VBA Tips+α
メニューバー・ツールバー編
1.メニューバー
1.1 新しいメニューを追加する
・CommandBar,CommandBarControl
・Add、OnAction、Caption
・VBAの処理を実行する方法
1.2 追加したメニューを変更する
・Enabledプロパティで活性非活性を変更
・ボタンの削除はDeleteメソッドで
1.3 追加したメニューを削除する
・個別に削除するときはDeleteで
・Resetでツールバーのリセット
■DAOデータアクセス編
■ADOデータアクセス編
■クエリー(SQL)編
■フォーム・サブフォーム編
■レポート編
■Printerオブジェクト編
■コントロール基本編
■テキスト/コンボ/リストボックス活用編
■メニューバー・ツールバー編
■マクロ(DoCmd)編
■複数値と添付ファイル編
■Accessの操作と便利な機能編
■プログラミングサンプル編
■番外編1.HTTPやFTPを使うには
■サイト内を検索
Happy! Happy! Islandその他のコンテンツ
■
VBAプログラミング系
Access VBAのTipsとサンプル
Excel VBA(エクセルマクロ)のTipsとサンプル
VBScript/JScriptのTipsとサンプル
プログラミング基礎・入門
■
入門と使い方
Access入門と使い方講座97~2003/2007/2010/2013
Access VBAプログラミング入門 2013/2010/2007/2003
Excel入門と使い方講座2013/2010/2007
■
ダウンロードコーナー
AccessとExcelのフリーソフト
■
その他
質問受け付けコーナー「管理人に聞いてみよう♪」
BBS過去ログ広場
HTMLの書き方
管理人プロフィール
┗
twitter(外部サイト)
管理人へメール
■
別館(海外向けサイト)
Excel Games and Access Games
VBAプログラミング&Tips集の
"Happy! Happy! Island"トップページへ
[PR]管理人が心を込めて書いた本
■
最速攻略 AccessVBAサンプル大全集
Access 2013/2010/2007対応版
■
速効!ビジネスPC Accessマクロ&VBA
Access2013/2010/2007対応
■
最速攻略Accessクエリ テクニック大全集
Access2013/2010/2007対応
■
AccessVBAマクロ超入門講座 Access2010/2007対応
■
ExcelVBA超入門講座 Excel2010/2007対応
■
ExcelVBAでできる RPGゲーム作成入門
■
[改訂新版]実践COBOLプログラミング入門
■
最速攻略 VBScriptサンプル大全集
Windows7/Vista/XP/2000対応
(
アマゾン
へジャンプします)
[PR]注目の情報
転職成功の秘訣はサイトに公開されない求人にあった
採用人数が少ない・専門性が高い・競合他社に知られたくないなど、魅力的な求人情報ほど一般には公開できないのです。
株デビューするなら SBI証券!
業界屈指の格安手数料と業界最高水準のサービスで口座数はネット証券 No.1!口座開設料・管理料は無料。
GDOゴルフショップ
ゴルフ用品のオンラインメガストア。品揃え10万点!
アスタリフトコラーゲンドリンク
毎日続けるものだから・・まとめ買いで最大10%OFF!集中コラーゲンケアで、ハリと潤いの溢れる毎日へ。
[リンク]IT関連情報サイトなど
gihyo.jp
技術評論社提供のIT関連コンテンツサイト
Copyright(C) 1999-2015
結城圭介
(Ver.3.51) All rights reserved