|
今晩は。
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
|
|