Excel VBAで、名称違いのほぼ同一内容のxlsファイルを同時に開いているときに、片方のブックだけを終了しようとするともう片方のブックに悪影響を与えていきます。
①xlsファイル起動時にAuto_openで隠すようにしているツールボックスやメニューバーをSystem_Close時に再度表示されるようにマクロを組んでいるのですが、もう片方のブックのツールボックスやメニューバーを起動して終了する。
②BeforeCloseを呼び出し時にもう片方に記載されているBeforeCloseを呼び出しにいき応答なしに。
③loopさせているわけではないのにSystem_CloseのEnd Subまでたどり着くともう一度System_Closeを実行し、エラーになる。
改善方法をいろいろと模索したのですがどこを弄っていいのかすら今一判っていません。
せめてSystem_Closeになにか影響がある文だけでも直したいのですが、お力をお貸し願えないでしょうか?
開いているブックには両方同じ内容が記載されています。
Excel2003 SP3
---ThisWorkbook--- Private Sub Workbook_BeforeClose(Cancel As Boolean) If CanClose = False Then System_Close End If If CanClose = False Then Cancel = True End If End Sub ---標準モジュール--- Public CanClose As Boolean Sub System_Close() Application.ScreenUpdating = False Dim CMsg, CStyle, CTitle, CResponse, CString CMsg = "Excelを終了します。よろしいですか?" CStyle = vbYesNo CTitle = "終了" Response = MsgBox(CMsg, CStyle, CTitle) If Response = vbYes Then ' [はい] がクリックされた場合、 MyString = "Yes" (隠したメニューバーを表示させたりするApplication.CommandBars多数、割愛) Application.DisplayAlerts = False '変更保存のメッセージを表示させない Application.ScreenUpdating = True 'Excelを終了 CanClose = True If Workbooks.Count = 1 Then ThisWorkbook.Saved = True Application.Quit Else ThisWorkbook.Close SaveChanges:=False End If Else ' [いいえ] がクリックされた場合、Msgboxを閉じる MyString = "No" End If End Sub
追記
コメントを参考に検証を行い、不明な点が浮かんできたので質問させてください。
①ファイル起動時に独立したプロセスで起動する方法。
Shell関数で名称を指定してしまうと、拡張子の有無で起動出来るかどうかが変わってしまうため、安定した起動方法を一緒に考えてほしい、ファイルの起動中に同一プロセスに別のファイルが入ってしまうと同じ現象が起こりそうなので、独立したプロセスを維持できるようにしたい。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/20 01:54
2016/05/20 03:43
2016/05/20 05:23
2016/05/20 09:10
2016/05/20 09:18