|
考え方を変えて、BeforeCloseイベントで制御するのはどうでしょうか。
以下を全てThisWorkbookモジュールに記入してください。
Option Explicit
Public CanClose As Boolean 'ブックを閉じる前にTrueに設定する
'ブックがアクティブになったとき
Private Sub Workbook_Activate()
Call ShowState(False)
End Sub
'ブックが非アクティブになったとき
Private Sub Workbook_Deactivate()
Call ShowState(True)
End Sub
'ブックを開くとき
Private Sub Workbook_Open()
Call ShowState(False)
CanClose = False
Application.WindowState = xlMaximized
ActiveWindow.Zoom = 100
End Sub
'ブックを閉じる前
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not CanClose Then
MsgBox "終了ボタン以外の方法では終了できません。終了ボタンを押してください。", vbExclamation
End If
Cancel = Not CanClose
End Sub
Public Sub 終了処理() '「ブックを閉じる」ボタン用
Call CloseBook
End Sub
Public Sub エクセル終了() '「エクセル終了」ボタン用
Call CloseBook(True)
End Sub
'終了前処理
Private Sub CloseBook(Optional CloseApp As Boolean = False)
Call ShowState(True)
CanClose = True
If CloseApp Then Application.Quit
ThisWorkbook.Close False
End Sub
'エクセルの状態設定
Private Sub ShowState(ParamBool As Boolean)
With ActiveWindow
.DisplayHorizontalScrollBar = ParamBool '水平スクロールバー
.DisplayVerticalScrollBar = ParamBool '垂直スクロールバー
.DisplayWorkbookTabs = ParamBool 'シート見出し
.DisplayGridlines = ParamBool '枠線
.DisplayHeadings = ParamBool '行列番号
End With
Toolbars(1).Visible = ParamBool '標準ツールバー
Toolbars(2).Visible = ParamBool '書式ツールバー
Toolbars(5).Visible = ParamBool '図形ツールバー
Toolbars(7).Visible = False 'フォームを消す
Toolbars(9).Visible = False 'VBを消す
Application.DisplayFormulaBar = ParamBool '数式バー
Application.DisplayStatusBar = ParamBool 'ステータスバー
Application.CommandBars("Worksheet Menu Bar").Enabled = ParamBool 'ワークシートメニューバー
End Sub
|
|