| 
    
     |  | おはようございます。 
 
 >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に残ったりして、全く別のブッ
 > クを開いたときメニューが表示されたりして不具合が出ます。
 
 Appは、Excel起動中はNothingしない方法をとります。
 
 ブックによって、メニューを表示・非表示を行うには、
 
 Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
 
 End Sub
 
 で中で判断するという方法はいかがですか?
 
 はっきり全体の仕様がわからないのですが・・・。
 アドインのThisworkbookに
 
 '===============================================================
 Option Explicit
 '===============================================================
 Private WithEvents App As Excel.Application
 '==================================================================
 Private Sub App_WindowDeactivate(ByVal Wb As Workbook, ByVal Wn As Window)
 Application.OnTime Now(), ThisWorkbook.Name & "!thisworkbook.chk"
 End Sub
 '==================================================================
 Private Sub Workbook_Open()
 Set App = Excel.Application
 Set_MyMenu
 End Sub
 '==================================================================
 Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
 Dim msg As String
 Dim Res As VBA.VbMsgBoxResult
 If Wb.Name = ThisWorkbook.Name Then Exit Sub
 MsgBox Wb.Name & "----" & Wb.Saved
 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
 End Sub
 '==================================================================
 Public Sub chk()
 If ActiveWorkbook Is Nothing Then
 Application.CommandBars("WorkSheet Menu Bar").Reset
 End If
 End Sub
 
 
 標準モジュールには
 
 '======================================
 Option Explicit
 Sub Set_MyMenu()
 Application.CommandBars("WorkSheet Menu Bar").Reset
 With MenuBars(xlWorksheet).Menus.Add("MyMenu")  'メニューを追加
 .MenuItems.Add "画面大小切替", "画面大小切替"
 .MenuItems.Add "アドイン ON/OFF", "AddinONOFF"
 .MenuItems.Add "Bookを開く", "Open_Book"
 ''''
 ''''
 End With
 End Sub
 
 上記のコードで問題点の解決の糸口になりませんか?
 (はっきり仕様が見えない箇所があるので↑この表現になりました)
 
 |  |