|
おはようございます。
>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の他のバージョンではいかがですか?
|
|