| 
    
     |  | おはようございます。 
 >Private Sub Workbook_BeforeClose(Cancel As Boolean)
 >  If Workbooks.Count > 1 Then
 >   'ThisWorkbook.Close False  '<=●タイミングの関係でこれ不要みたい●
 >   Exit Sub
 >  End If
 >  '念のため保存しておく(ここで上書きしたくない場合はSavedを使う)
 >  '開くかどうかの分岐
 >  ThisWorkbook.Save
 >  If MsgBox("002を開きますか?", vbYesNo) = vbYes Then
 Workbooks.Open thisworkbook.path & "\002.xls"
 >   ThisWorkbook.Close False
 >  End If
 >End Sub
 
 私もいくつか考えてみたのですが、Excel2002 SP3では、うまくいきません。
 上記のkobasanさんのコードも
 
 コードを設定後、一度Excelを終了して後、
 再度、Excelを起動し、問題の上記のコードを含んだ001.XLSを開いた後、
 いきなり、Excel終了Xボタンをクリックすると、
 
 >  If MsgBox("002を開きますか?", vbYesNo) = vbYes Then
 Workbooks.Open thisworkbook.path & "\002.xls"
 上記のMsgboxで「はい」をクリックすると、
 次行の
 
 Workbooks.Open thisworkbook.path & "\002.xls"
 
 ここで、
 「実行時エラー'5'
 プロシジャー呼び出し、または引数が不正です」
 
 というエラーが発生し、コードが止まります。
 002.XLSは開かれいるので、
 
 On Error Resume Next
 Workbooks.Open thisworkbook.path & "\002.xls"
 
 等と付加してもエラーは回避できません。
 (VBEのオプションのエラートラップは 「エラー処理対象外のエラーで中断」を選択)
 つまり、トラップを拾えない状況です。
 
 しかし、このエラー発生後、一度、002.Xls,001.Xlsを閉じた後(Excelは終了しない)、再度001.XLSを開いて、同様の動作を行うと、001.XLSが閉じて、002.XLSが開く
 という正しい処理がなされます。
 
 いくつか修正も必要かと思いますが、001.XlsのThisworkbookに
 
 Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Dim bk As Object
 If MsgBox("002を開きますか?", vbYesNo) = vbYes Then
 
 On Error Resume Next
 With CreateObject("excel.application")
 .Visible = True
 .Workbooks.Open ThisWorkbook.Path & "\002.xls"
 End With
 Application.Quit
 End If
 End Sub
 
 などとして、別インスタンスのExcelに002.Xlsを開く方法ぐらいしか
 正常に作動しません。
 
 
 Excelの他のバージョンではいかがですか?
 
 |  |