Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


28662 / 76738 ←次へ | 前へ→

【53370】Re:アドインとメニュー表示
お礼  kobasan  - 08/1/6(日) 12:31 -

引用なし
パスワード
   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

ありがとうございました。

0 hits

【53358】アドインとメニュー表示 kobasan 08/1/5(土) 20:55 質問
【53361】Re:アドインとメニュー表示 ichinose 08/1/6(日) 9:13 発言
【53370】Re:アドインとメニュー表示 kobasan 08/1/6(日) 12:31 お礼

28662 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free