| 
    
     |  | 今晩は。 
 Xボタンを押してデータブックを閉じ、アドインだけを表示したとき 、
 "WorkSheet Menu Bar"に追加したメニューをアドインと非アドインの両方でうま
 く表示させたいのですが、Xボタンが2種類あるのでうまくいきません。
 
 ウインドウ右上の黒Xボタンを押したときは問題ないのですが、最上部の赤Xボ
 タンを押したときは、メニューが消えたりして、期待した動きになりません。
 赤Xボタンを押したら、追加メニューが削除されます。
 
 難しいポイントは、
 (1)赤Xボタンを押したら、まずアドインのSavedをチェックしてから、データブッ
 クのSavedをチェックしています。この順番が難しいポイントになっています。
 
 (2)Set App = Nothing のタイミングも難しいです。
 [A]案では、赤Xボタンを押してキャンセルしたら、Set App = Nothingがある
 ため、追加したメニューは消えてしまいます。
 
 [B]案では、App_WorkbookBeforeCloseを使用して、Set App = Nothing を無効
 にしていますが、こうすると、メニューがExcelに残ったりして、全く別のブッ
 クを開いたときメニューが表示されたりして不具合が出ます。
 
 (3)アドインと非アドインの両方でうまく表示させようとしている点も難しくなっ
 ている点です。
 
 (4)アドインからデータブックを複数開くこと想定しています。
 
 解決策がありましたらよろしくお願いします。
 
 '標準モジュールに
 Sub Set_MyMenu()
 With MenuBars(xlWorksheet)
 .Reset
 With .Menus.Add("MyMenu")  'メニューを追加
 .MenuItems.Add "画面大小切替", "画面大小切替"
 .MenuItems.Add "アドイン ON/OFF", "AddinONOFF"
 .MenuItems.Add "Bookを開く", "Open_Book"
 ''''
 ''''
 End With
 End With
 End Sub
 
 
 'TisWorkbookモジュールに
 Private WithEvents App As Excel.Application
 
 Private Sub Workbook_Open()
 Set App = Excel.Application
 Set_MyMenu
 End Sub
 
 --------------------------[A]-----------------------------
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Dim msg As String
 Dim Res As VBA.VbMsgBoxResult
 If Me.Saved = False Then
 msg = "'" & Me.Name & "' への変更を保存しますか?"
 Res = MsgBox(msg, vbYesNoCancel + vbExclamation)
 Select Case Res
 Case vbYes: Me.Save
 Case vbNo: Me.Saved = True
 Case vbCancel
 Cancel = True
 Exit Sub
 End Select
 End If
 '
 Me.Application.CommandBars("WorkSheet Menu Bar").Reset
 Set App = Nothing
 End Sub
 
 -------------------------[B]--------------------------
 Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
 Dim msg As String
 Dim Res As VBA.VbMsgBoxResult
 If Wb.Saved = False Then
 msg = "'" & Wb.Name & "' への変更を保存しますか?"
 Res = MsgBox(msg, vbYesNoCancel + vbExclamation)
 Select Case Res
 Case vbYes: Wb.Save
 Case vbNo: Wb.Saved = True
 Case vbCancel
 Set_MyMenu
 Cancel = True
 Exit Sub
 End Select
 End If
 '
 wb.Application.CommandBars("WorkSheet Menu Bar").Reset
 'Set App = Nothing
 End Sub
 
 |  |