• ベストアンサー

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の時でもかのマクロを働かすにはどのような命令文を何処に付け加えればいいのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.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

noname#18634
質問者

お礼

ご親切に例文を書いていただき有り難うございました。 採用させていただきました。すっきりしました。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

美しくも正しくもないけど一番簡単にやるなら On Error Resume Next でしょう。 意味はエラーが起きても無視して次の行から実行。 今回のようにエラーの原因がこれしかないと分かっているなら敢えて使ってもいいですが、もっと複雑なコードの途中にでも入れると本来のエラーの原因が若りにくくなって混乱の元になりますので要注意です。 On Error Resume Nextは中々便利なんですが、バグを隠すためのものではありません。本来なら、先にWindowが開かれているかの確認をするなり、あるいは開いた際にフラグをたてておいて、フラグがたっていたのならCloseするなどの処理をするのが正当な手法です。

noname#18634
質問者

お礼

有り難うございました。勉強になりました。

関連するQ&A