@@ -58,13 +58,23 @@ Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hWnd As LongPtr,
5858
5959Private Const SW_HIDE As Long = 0
6060Private Const SW_FORCEMINIMIZE = 11
61+
62+ Private TV As TaskTrayView
63+ Private MultiProcess As Boolean
6164'--------------------------------------------------------------
6265' ブックオープンイベント
6366'--------------------------------------------------------------
6467Private Sub Workbook_Open ()
6568
6669 Logger.LogBegin "Workbook_Open"
6770
71+ 'CreateObjectでRelaxToolsが開かれた場合
72+ If Application.visible Then
73+ MultiProcess = False
74+ Else
75+ MultiProcess = True
76+ End If
77+
6878 '情報ログの出力
6979 Logger.LogInfo vbCrLf & getVersionInfo
7080
@@ -78,6 +88,9 @@ Private Sub Workbook_Open()
7888
7989 Set mColSection = rlxInitSectionSetting()
8090
91+ 'Excel常駐
92+ Me.Regident
93+
8194 Logger.LogFinish "Workbook_Open"
8295
8396End Sub
@@ -100,20 +113,33 @@ Private Sub Workbook_BeforeClose(Cancel As Boolean)
100113
101114 Call DeleteTemporaryFile
102115
103- '終了モード
104- If CBool(GetSetting(C_TITLE, "Option" , "ExitMode " , False )) Then
116+ '常駐モード
117+ If CBool(GetSetting(C_TITLE, "Option" , "RegidentMode " , False )) And MultiProcess = False Then
105118 If Workbooks.Count > 0 Then
106119 Dim WB As Workbook
107120 For Each WB In Workbooks
108121 WB.Close
109122 Next
123+ ' Workbooks.Add
110124 ShowWindow Application.hWnd, SW_FORCEMINIMIZE
111125 DoEvents
112126 Cancel = True
113127 Else
128+ If MsgBox("Excelを終了します。よろしいですか?" , vbQuestion + vbOKCancel, C_TITLE) <> vbOK Then
129+ ' ShowWindow Application.hwnd, SW_FORCEMINIMIZE
130+ ' DoEvents
131+ Cancel = True
132+ Exit Sub
133+ End If
134+
135+ 'ショートカットの削除
114136 Call removeShortCutKey
137+
138+ Me.Unregident
139+
115140 End If
116141 Else
142+ 'ショートカットの削除
117143 Call removeShortCutKey
118144 End If
119145
764790 Application.DisplayAlerts = blnDisplayAlerts
765791 MsgBox Err.Description, vbOKOnly + vbCritical, C_TITLE
766792End Sub
767-
793+ '--------------------------------------------------------------
794+ ' Excel常駐コマンド
795+ '--------------------------------------------------------------
796+ Public Sub Regident ()
797+ '常駐モード
798+ If CBool(GetSetting(C_TITLE, "Option" , "RegidentMode" , False )) And MultiProcess = False Then
799+ Set TV = New TaskTrayView
800+ TV.AddIcon Application.hWnd, "Excel常駐モード"
801+ TV.ShowBalloon "Excel常駐モード" & vbCrLf & "完全に終了させたい場合は、最小化されている空のウィンドウを閉じてください。"
802+ End If
803+ End Sub
804+ '--------------------------------------------------------------
805+ ' Excel常駐コマンドの解除
806+ '--------------------------------------------------------------
807+ Public Sub Unregident ()
808+ '常駐モードの解除
809+ If TV Is Nothing Then
810+ Else
811+ TV.DeleteIcon
812+ Set TV = Nothing
813+ End If
814+ End Sub
768815
0 commit comments