|
ichinose さん 今日は。
提示のコードを参考に、手を加え、なんとか望みの動きをするようになりました。
ありがとうございます。
アドインの時、追加メニューが表示されなかったので、黒×ボタンを判定するフラッグを追加して、下記コードで期待通りの動きをするようになったと思います。
使い込んでいる中で、不具合があったら、また検討してみます。
皆様の参考のためにもコードを載せておきます。
>>Xボタンを押してデータブックを閉じ、アドインだけを表示したとき 、
>>"WorkSheet Menu Bar"に追加したメニューをアドインと非アドインの両方でうま
>>く表示させたいのですが、Xボタンが2種類あるのでうまくいきません。
>
>↑この「アドインと非アドインの両方でうまく表示させたい」がはっきり意味が
>わかりませんが・・・。
コードの制作段階ではアドインでは、作りづらいので普通のブックで修正しています。アドインの切り替えは
ThisWorkbook.IsAddin
の切り替えで行っています。
アドインのブックのみになったときでも、メニューを残したいと言うことです。
>> [B]案では、App_WorkbookBeforeCloseを使用して、Set App = Nothing を無効
>> にしていますが、こうすると、メニューがExcelに残ったりして、全く別のブッ
>> クを開いたときメニューが表示されたりして不具合が出ます。
メニューが残る原因はメニュー作成コードにあることがわかりました。
Dim Pop As CommandBarPopup
Set Pop = 親.Controls.Add(msoControlPopup, temporary:=True)
のtemporary:=Trueを追加すると直りました。
以下は、取り合えず採用コードです。
Private WithEvents App As Excel.Application
Private BlackX As Boolean '黒X判定用
Private Sub Workbook_Open()
Set App = Excel.Application
Set_MyMenu
BlackX = False
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
BlackX = True
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
Private Sub App_WindowDeactivate(ByVal Wb As Workbook, ByVal Wn As Window)
Application.OnTime Now(), ThisWorkbook.Name & "!thisworkbook.chk"
End Sub
Public Sub chk()
If ActiveWorkbook Is Nothing And BlackX = False Then
Application.CommandBars("WorkSheet Menu Bar").Reset
行列番号を表示
End If
BlackX = False
End Sub
ありがとうございました。
|
|