-----------------2014/10/28追記ここから--------------
この記事のマクロを修正した記事
エクセル2007、右クリックメニューにシート一覧ボタンを作成するマクロ修正版 - 午後わてんのブログ -
Yahoo!ブログ
-----------------2014/10/28追記ここまで-----------------
エクセル2007、右クリックメニューからシートを選択その2
昨日の続きでいじっていたら良くなった
見た目は昨日とほとんど同じ
違うのはボタンの名前をブックの名前+"シート一覧"にしたところ
ここから新しくシートを挿入したときやシートを削除、
シート名を変更した場合にボタンが対応するようにした
↑Sheet2をシート2に名前変更、Sheet3を削除してから右クリック
そこからシートを3枚挿入してから右クリック↓
右クリックしたブックとは別のシートを選択した時も表示できるようにした
右クリックした場所はBook7という名前のブックで選択したシートは
MHP3という名前のブックのスキルという名前のシート
結果は↓
MHP3は複数のウィンドウを開いていてウィンドウの名前が
ブックのファイル名の後ろに:と数字になっている
他のブックから選択されたシートが有るブックが複数ウィンドウだった場合は
数字が1のウィンドウになるのは仕様
書いた場所は昨日と同じで個人用マクロブックのPERSONAL.XLSBの
標準モジュール
右クリックメニューにボタンを追加したりするマクロがこれで
Public Sub 右クリックメニューにシート一覧作成3()
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 = "右クリックメニューにシート一覧作成3"
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
Set b1 = cb.Controls.Add(Type:=msoControlPopup, temporary:=True, before:=1)
With b1
.Caption = b1Name
.OnAction = "右クリックメニューにシート一覧作成3"
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
どのボタンが押されたか判定してからシートを表示するマクロがこれ
これも書いた場所は同じPERSONAL.XLSBの標準モジュール
画像だと余計なコメントがいっぱいなので直したのが↓
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
うーん、できたなあ、目的のものができて満足