Excelの図形をクリックされたらメニューを表示して、選択されたブックを開きます。
こうすることで、1つの図形に複数のリンクを設定できます。
動作イメージ
Excelの図形をクリック。
メニューが表示されるので、開きたいブックを選択。
メニューで選択したブックが開く。
サンプルソース
Option Explicit
Dim caption(2) As String 'メニューに表示する文字列
Dim path(2) As String 'ブックのパス
Sub popupMenu_01()
Dim cbc As CommandBarControl
caption(1) = "ブック1を開く"
caption(2) = "ブック2を開く"
path(1) = "C:\wk\ブック1.xlsx" '任意のパスに変更ください
path(2) = "C:\wk\ブック2.xlsx" '任意のパスに変更ください
CommandBars("Shapes").Reset
'メニュー1
Set cbc = CommandBars("Shapes").Controls.Add(before:=1)
With cbc
.caption = caption(1)
.OnAction = "openBook"
End With
'メニュー2
Set cbc = CommandBars("Shapes").Controls.Add(before:=2)
With cbc
.caption = caption(2)
.OnAction = "openBook"
End With
'区切り線
CommandBars("Shapes").Controls(3).BeginGroup = True
'メニューをポップアップ
CommandBars("Shapes").ShowPopup
End Sub
'メニューで選択されたブックを開く
Sub openBook()
Dim book_path As String
book_path = path(CommandBars.ActionControl.Index)
Workbooks.Open Filename:=book_path, ReadOnly:=True
End Sub
図形にマクロを登録する方法
下記の投稿を参考にして、Excelの図形に上記マクロ(popupMenu_01)を登録してください。
解説
メニューを追加
'メニュー1
Set cbc = CommandBars("Shapes").Controls.Add(before:=1)
With cbc
.caption = caption(1)
.OnAction = "openBook"
End With
'メニュー2
Set cbc = CommandBars("Shapes").Controls.Add(before:=2)
With cbc
.caption = caption(2)
.OnAction = "openBook"
End With
Shapesという名前のCommandBarsオブジェクトを使い、右クリックメニューを操作します。
行17の「Add(before:=1)」で、もとからある1番目のメニューの上(before)に、追加したい1つ目のメニューを追加します。
追加したメニューには、下記のプロパティをセットします。
プロパティ | 説明 |
caption | メニューに表示する文字列 |
OnAction | メニューが選択された時に実行するマクロ |
同様に、2つ目のメニューも追加します。
メニュー追加のイメージは、下図のとおりです。
メニューに区切り線を追加
'区切り線
CommandBars("Shapes").Controls(3).BeginGroup = True
追加したメニューと、もとからあるメニューを区別するため、もとからあるメニューの上に境界線を追加します。
メニューをポップアップ
'メニューをポップアップ
CommandBars("Shapes").ShowPopup
作成したメニューを、ポップアップ表示します。
メニューで選択されたブックを開く
'メニューで選択されたブックを開く
Sub openBook()
Dim book_path As String
book_path = path(CommandBars.ActionControl.Index)
Workbooks.Open Filename:=book_path, ReadOnly:=True
End Sub
CommandBars.ActionControl.Indexには、選択されたメニューのインデックス番号が入っています(1始まり)。
このインデックス番号を元に、開くファイルのパスを、path配列から取得しています。
終わりに
今回は右クリックメニューを活用して、1つの図形に複数のブックを開くリンクを設定しました。
OnActionプロパティにセットするマクロを、メニューごとに異なるものにすれば、メニューの選択に応じたマクロを実行することも可能です。
なお、Excelの図形をクリックした時に動かすマクロが1つの場合は、もっと簡単な方法があります。下記の投稿をチェックしてみてください。
コメント