エクセル2007、右クリックメニューからシート一覧を表示してシートを選択 - 午後わてんのブログ -
Yahoo!ブログ
↑2014/05/30は5ヶ月前の修正版
セルの右クリックメニューにシート一覧を選択するボタンを追加するマクロ
追加されたボタンはエクセルを終了すると自動で消える
他のブックで右クリックするとそのブックのシート一覧ボタンも作成されてしまう
というもの
↑はBook2で右クリックした後にもう一度右クリックしたところ
マクロを実行していないのにBook2のシート一覧ボタンをが作成されている
この不具合を修正したマクロが↓
シート一覧を作りたいウィンドウを開いた状態で
右クリックメニューにシート一覧新規作成
を実行
Public Sub 右クリックメニューにシート一覧新規作成()
Dim CB As CommandBar
Dim b1 As CommandBarPopup
Dim b2 As CommandBarButton
Dim ws As Sheets
Dim Wbn As String, b1Name As String
Dim c As CommandBarControl, b As CommandBarControl
Set ws = ActiveWorkbook.Sheets
Set CB = Application.CommandBars(36)
Wbn = ActiveWorkbook.Name
b1Name = Wbn & "シート一覧"
Set b1 = CB.Controls.Add(Type:=msoControlPopup, temporary:=True, before:=1)
With b1
.Caption = b1Name
.OnAction = "右クリックメニューにシート一覧更新確認用"
For i = 1 To ws.Count
Set b2 = .Controls.Add(Type:=msoControlButton, temporary:=True, parameter:=Wbn)
b2.Caption = ws(i).Name
b2.OnAction = "シート選択"
Next i
End With
End Sub
Public Sub 右クリックメニューにシート一覧更新確認用()
Dim CB As CommandBar
Dim b1 As CommandBarPopup
Dim b2 As CommandBarButton
Dim ws As Sheets
Dim Wbn As String, b1Name As String
Dim c As CommandBarControl, b As CommandBarControl
Set ws = ActiveWorkbook.Sheets
Set CB = Application.CommandBars(36)
Wbn = ActiveWorkbook.Name
b1Name = Wbn & "シート一覧"
For Each c In CB.Controls
If c.Caption = b1Name Then
Set b1 = c
For Each b In c.Controls
b.Delete
Next b
With b1
.Caption = b1Name
.OnAction = "右クリックメニューにシート一覧更新確認用"
For i = 1 To ws.Count
Set b2 = .Controls.Add(Type:=msoControlButton, temporary:=True, parameter:=Wbn)
b2.Caption = ws(i).Name
b2.OnAction = "シート選択"
Next i
End With
Exit Sub
End If
Next c
End Sub
Public Sub シート選択()
On Error Resume Next
Dim AwCap As String, bName As String, aName As String
Dim l As Long
bName = Application.CommandBars.ActionControl.parameter
AwCap = ActiveWindow.Caption
l = InStr(ActiveWindow.Caption, ":")
If l <> 0 Then
aName = Left(AwCap, l - 1)
End If
If bName <> aName Or l = 0 Then
Workbooks(bName).Activate
ActiveWorkbook.Sheets(Application.CommandBars.ActionControl.Caption).Activate
Else
Windows(AwCap).Activate
ActiveWorkbook.Sheets(Application.CommandBars.ActionControl.Caption).Activate
End If
End Sub
画像だとこんな感じ
ボタン作成とシートの変更確認が同じマクロだったのを
右クリックメニューにシート一覧新規作成
右クリックメニューにシート一覧更新確認用
この二つに分けただけ
2016/12/15追記
更に修正してアドインにした
2016/12/15追記ここまで