- ベストアンサー
Excelのマクロの命令文を教えてください
EXCEL2002です。 仮にAAA.XLSを開いて書込をしその内容をマクロでWTTOTAL.XLSに転記し又AAA.XLSに戻ります。ここまでの進行は何とかマクロが作れました。その後AAA.XLSより終了マクロを下記のように作りました。 Sub SHUURYOU() Windows("WTTOTAL.XLS").Close SAVECHANGES:=True ActiveWorkbook.Save Application.Quit End Sub この場合うまく働いてくれますが時にAAA.XLSだけで作業が終わることがあります。するとWTTOTAL.XLSが開いていないのでエラーになります。WTTOTAL.XLSが開いていてもCLOSEの時でもかのマクロを働かすにはどのような命令文を何処に付け加えればいいのでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
この例なら単純にエラーが出ても無視してしまうように出来ます。 On Error Resume next Windows("WTTOTAL.XLS").Close SAVECHANGES:=True でも、開いているブックを調べて、必要なブックが開いていない場合はそもそも処理をしないとか、そういう処理の方が良いように思います。 Sub test() Dim wb As Workbook, targetBook As Workbook For Each wb In Workbooks If wb.Name = "WTTOTAL.XLS" Then Set targetBook = wb Exit For End If Next wb If Not targetBook Is Nothing Then MsgBox targetBook.Name & "は開いてますので閉じます" targetBook.Close Else MsgBox "WTTOTAL.XLSは開いてませんよ" End If End Sub
その他の回答 (1)
- popesyu
- ベストアンサー率36% (1782/4883)
美しくも正しくもないけど一番簡単にやるなら On Error Resume Next でしょう。 意味はエラーが起きても無視して次の行から実行。 今回のようにエラーの原因がこれしかないと分かっているなら敢えて使ってもいいですが、もっと複雑なコードの途中にでも入れると本来のエラーの原因が若りにくくなって混乱の元になりますので要注意です。 On Error Resume Nextは中々便利なんですが、バグを隠すためのものではありません。本来なら、先にWindowが開かれているかの確認をするなり、あるいは開いた際にフラグをたてておいて、フラグがたっていたのならCloseするなどの処理をするのが正当な手法です。
お礼
有り難うございました。勉強になりました。
お礼
ご親切に例文を書いていただき有り難うございました。 採用させていただきました。すっきりしました。