|
おはようございます。
>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
上記のコードで問題点の解決の糸口になりませんか?
(はっきり仕様が見えない箇所があるので↑この表現になりました)
|
|