Excel

Excelの図形に、複数のリンクを設定する方法

Excel

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つの場合は、もっと簡単な方法があります。下記の投稿をチェックしてみてください。

コメント

タイトルとURLをコピーしました