' [079.xls] ' [ThisWorkbook] のコード Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) お仕事終了 End Sub ' [Module1] のコード '★★☆ 業務に合わせてメニューをカスタマズする ☆★★ Option Explicit Option Base 1 '既定の配列のインデックス番号を 1 に設定します Dim cb As CommandBar 'メニューバー Dim cb_ctrl As CommandBarControl 'メニューバーのメンバ Dim m_name() As String 'コントロールバーの名前を入れる配列 Dim m_int As Integer '元のコントロールバーの数 Dim i As Integer Dim flug As Boolean Sub start() Dim s_name As String With Application '再度マクロが実行されるのを防ぐ、フラグで判断しています If flug = True Then Exit Sub flug = True .Caption = "架空産業株式会社 業務システム" .ScreenUpdating = False s_name = ActiveSheet.Name 'すべてのツールバーを非表示 .DisplayFormulaBar = False m_int = 0 For i = 1 To .CommandBars.Count Set cb = .CommandBars(i) If cb.Visible Then m_int = m_int + 1 ReDim Preserve m_name(m_int) m_name(m_int) = cb.Name End If Next On Error Resume Next i = 0 For i = 1 To m_int .CommandBars(m_name(i)).Visible = False Next i On Error GoTo 0 '"メニューバー"のすべてのメンバを削除する --- Set cb = .CommandBars("Worksheet Menu Bar") End With For Each cb_ctrl In cb.Controls cb_ctrl.Delete Next cb_ctrl '"業務の種類"メニューの作成 Set cb_ctrl = cb.Controls.Add(Type:=msoControlPopup, Before:=1) cb_ctrl.Caption = "業務の種類(&R)" '"業務の種類"→以下の各コマンドの作成 Set cb_ctrl = cb.Controls("業務の種類(&R)").Controls.Add(Type:=msoControlButton, Before:=1) cb_ctrl.Caption = "お仕事1(&S)" cb_ctrl.OnAction = "work1" Set cb_ctrl = cb.Controls("業務の種類(&R)").Controls.Add(Type:=msoControlButton, Before:=2) cb_ctrl.Caption = "お仕事2(&I)" cb_ctrl.OnAction = "work2" Set cb_ctrl = cb.Controls("業務の種類(&R)").Controls.Add(Type:=msoControlButton, Before:=3) cb_ctrl.Caption = "お仕事終了(&Q)" cb_ctrl.OnAction = "お仕事終了" '"ツールの中に新メニュー作成"メニューの作成 Set cb_ctrl = cb.Controls.Add(Type:=msoControlPopup, Before:=2) cb_ctrl.Caption = "ツールの中に新メニュー作成(&M)" '"ツールの中に新メニュー作成"→"業務メニュー"コマンドの作成 --- Set cb_ctrl = cb.Controls("ツールの中に新メニュー作成(&M)").Controls.Add(Type:=msoControlButton, Before:=1) cb_ctrl.Caption = "ツールに架空産業株式会社 業務システムを追加(&T)" cb_ctrl.OnAction = "業務メニュー" End Sub Sub 業務メニュー() Dim j As Integer Set cb = Application.CommandBars("Worksheet Menu Bar") cb.Reset 'コントロールの構成を、既定の状態に戻す Application.DisplayFormulaBar = True i = 0 For i = 1 To m_int '記憶したツールバーを順次戻す Application.CommandBars(m_name(i)).Visible = True Next i j = cb.Controls("ツール(&T)").Controls.Count 'ツール(T)内のサブメニューの数 'メニューバーの"ツール"内の最後に"業務システム(&G)"サブメニューを追加作成 Set cb_ctrl = cb.Controls("ツール(&T)").Controls.Add(Type:=msoControlButton, Before:=j + 1) cb_ctrl.Caption = "業務システム(&G)" cb_ctrl.OnAction = "start" End Sub Sub お仕事終了() With Application .ScreenUpdating = False .CommandBars("Worksheet Menu Bar").Reset .DisplayFormulaBar = True '記憶したツールバーを順次戻す i = 0 For i = 1 To m_int .CommandBars(m_name(i)).Visible = True Next i .Caption = "Microsoft Excel" End With flug = False 'ここで自動で終了する時には→ ActiveWorkbook.Close True End Sub Sub work1() MsgBox "ここに業務作業1のマクロを記述する" & Chr(10) _ & "一生懸命お仕事" End Sub Sub work2() MsgBox "ここに業務作業2のマクロを記述する" & Chr(10) _ & "お仕事はマクロで楽しく" End Sub