エクセルマクロ達人養成塾 小川です。
昨日は、「イベントとフォーム」をテーマにした、受講生限定の上級講座でした。
今日は、そのときに紹介したマクロをひとつ。
自作のメニューバーを追加したり、削除したりするマクロです。
以下のサンプルで、
AddMenuBar
や、
DelMenubar
を、
Workbook_WindowActivate
や、
Workbook_WindowDeactivate
のイベントに関連づけて利用します。
Worksheet_Activate
や、
Worksheet_Deactivate
でも、良いかもしれません。
Option Explicit
Public Sub AddMenuBar()
DelMenubar
Dim cdBar As CommandBarControl
Dim cbCtrl As CommandBarControl
Set cdBar = _
CommandBars(“Worksheet Menu Bar”).Controls.Add _
(Type:=msoControlPopup, Temporary:=True)
cdBar.Caption = “Te&st”
Set cbCtrl = cdBar.Controls.Add
With cbCtrl
.Caption = “&Move to current”
.OnAction = “Move_To_Current”
.BeginGroup = False
.FaceId = 276
End With
Set cbCtrl = cdBar.Controls.Add(Type:=msoControlPopup)
With cbCtrl
.Caption = “&Thru”
.BeginGroup = False
With cbCtrl.Controls.Add()
.Caption = “&1 day”
.OnAction = “Thru1day”
.FaceId = 1640
End With
With cbCtrl.Controls.Add()
.Caption = “&Days”
.OnAction = “Thrudays”
.FaceId = 2161
End With
End With
Set cbCtrl = cdBar.Controls.Add
With cbCtrl
.Caption = “&Copy Row”
.OnAction = “CopyRow”
.BeginGroup = False
.FaceId = 278
End With
End Sub
Public Sub DelMenubar()
Dim myBar As CommandBar
Set myBar = CommandBars(“Worksheet Menu Bar”)
On Error Resume Next
myBar.Controls(“Te&st”).Delete
On Error GoTo 0
End Sub
Private Sub Scheduler()
Debug.Print “Scheduler”
End Sub
Private Sub Move_To_Current()
Debug.Print “Move_To_Current”
End Sub
Private Sub Thru1day()
Debug.Print “Thru1day”
End Sub
Private Sub Thrudays()
Debug.Print “Thrudays”
End Sub
Private Sub CopyRow()
Debug.Print “CopyRow”
End Sub
まずは、訳が分からなくても、動かしてみてください。
中身についてはそのうち解説したいと思いますが。
解説なしで理解するには、メニューバーもオブジェクトのひとつだということ、、VBAから操作できるという認識をしっかり持った上で、
○コレクションの中である特定ののオブジェクトを指定する方法
○Setステートメント
○Withステートメント
といった、オブジェクト操作で出てくる構文をしっかり理解していることが必要かもしれません。