• ベストアンサー

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

noname#18634
noname#18634

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

  • ベストアンサー
  • 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

  • エクセルのマクロで保存して終了が出来ない

     あるエクセルファイルにて、VBAで Sub 保存して終了() ActiveWorkbook.Save ActiveWorkbook.close End Sub  というマクロを作成したのですが、1回目は正常に動いたのですが次からは、そのマクロを動かしても画面が一瞬点滅するだけで、上書き保存も終了もしません。  それで、ファイルを別の名前をつけて保存してその、別の名前で保存したファイルで、また上のマクロを動かすと1回目は正常に動くのですが、やはり次に開くと動かなくなります。  因みに他のマクロは正常に動作し、この保存して終了させるマクロだけが変なのです。  マクロの書き方を変えて以下のようにしてもだめでした。 Workbooks("ナントカ.xls").Close savechanges:=True  やはり、何回書き方を変えても保存して終了させることだけが出来ません。普通にマクロを使用せず手動ですることは出来るのですが…。  分かりにくい説明ですみませんが、よろしくお願いします。

  • ■ エクセルマクロについてです。初級?

    エクセルのマクロでデスクトップにあるエクセルファイルを開くにはどうしたらいいのでしょうか? 現在は、エクセルファイルA.xls B.xlsという2つを開いていて、マクロを実行することができるのですが、これをA.xlsだけ開いている上体で、実行したいのです。 なので、デスクトップに置いてあるB.xlsファイルを開くコマンド?というか、関数が知りたいのですが、どうしたらいいのでしょうか? 現在はこのような感じになっております。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2008/9/10 ユーザー名 : ' ' ActiveCell.FormulaR1C1 = "12345" Range("G17").Select ActiveCell.FormulaR1C1 = "129876" Range("G18").Select Windows("B.xls").Activate Range("N16").Select ActiveCell.FormulaR1C1 = "8/4/2008" Range("N17").Select ActiveWorkbook.Save Range("O16").Select ActiveWorkbook.Save ActiveWindow.Close End Sub

  • このコードの間違い箇所が解りません!

    tes1 の .xls と同じフォルダに 「tes2.xls」 という名前で保存し、閉じる。 というコードなんですが、「tes2.xls」 がなくなってしまいますが、どこが間違ってますでしょうか? 以上 よろしくお願い致します。  --------- Sub tes1() ActiveWorkbook.Close SaveChanges:=True, _ Filename:=ActiveWorkbook.Path & "\tes2.xls" End Sub ---------

  • エクセル・エラーを出さずに複数ブックをクローズしたい

    複数のファイルを閉じたいのですが、 Sub 必要ファイルを閉じる() Workbooks("あ.xls").Close SaveChanges:=False Workbooks("い.xls").Close SaveChanges:=False Workbooks("う.xls").Close SaveChanges:=False Workbooks("え.xls").Close SaveChanges:=False End Sub 開いていないファイルがあるとエラーで止まってしまいます。 この4つのファイルに該当するものがあれば、閉じる というマクロを組みたいです。 アドバイス、宜しくお願いします。

  • エクセルと同じファイル名でcsvを作成するマクロ

    エクセルからCSVファイルをYYMMDD付でマクロを使って 作ろうとしていますが拡張子の「.xls」がどうしても残ってしまいます。 例えば、「test.xls」が「test.xls070326.csv」のように。 これを「test070326.csv」とするにはどうしたらよいでしょう。 今のコードはつぎのようにしています。 Sub test1() Dim flname As Variant Dim wb As Workbook flname = ActiveWorkbook.Name + CStr(Format(Date, "yymmdd")) ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname, _ FileFormat:=xlCSV ActiveWindow.Close savechanges:=False ActiveWorkbook.Close End Sub これでもCSVとしては使えるのですが、気持ちがすっきりしません。 どなたか正解をお願いします。

  • EXECLの変更を保存せずにブック強制的に閉じる方法を

    困り果てています VISTAとXPでマクロで EXECLの変更を保存せずにブック強制的に閉じる方法を 教えていただきたいのですがテストをしてみたマクロは 下記のようなものですがですがうまく動作しません シートの中にスピンボタンがありセルの中の数字を 変えると変更を保存しますか? となります。 Sub Auto_Close() ThisWorkbook.Saved = True End Sub Sub 例1434()   ActiveWorkbook.Saved = True ActiveWorkbook.Close End Sub Sub 13() ThisWorkbook.Close SaveChanges:=False End Sub Sub CloseBook() Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True End Sub Sub CloseBook2() ActiveWorkbook.Close savechanges:=False End Sub いずれもだめでした 良い方法をお教えください。

  • EXCELのマクロをタスクスケジュールで実行

    WindowsXPのタスクスケジュールでEXCELのマクロを実行しています。 動くのですが一番最後にEXCELを保存して終了をしたいのですが ActiveWorkbook.close SaveChanges:=true を一行追加しても終了してくれません。どうしたらよろしいですか。

  • EXECLの変更を保存せずにブック強制的に閉じる方法を

    困り果てています VISTAとXPでマクロで EXECLの変更を保存せずにブック強制的に閉じる方法を 教えていただきたいのですがテストをしてみたマクロは 下記のようなものですがですがうまく動作しません シートの中にスピンボタンがありセルの中の数字を 変えると変更を保存しますか? となります。 Sub Auto_Close() ThisWorkbook.Saved = True End Sub Sub 例1434()   ActiveWorkbook.Saved = True ActiveWorkbook.Close End Sub Sub 13() ThisWorkbook.Close SaveChanges:=False End Sub Sub CloseBook() Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True End Sub Sub CloseBook2() ActiveWorkbook.Close savechanges:=False End Sub いずれもだめでした 良い方法をお教えください。

  • 保存したくない(エクセル2003)

    標準モジュールで Sub test() ActiveWorkbook.Close SaveChanges:=False End Sub これを実行する前に、セルに値を入力を入力して コードを実行すると SaveChanges:=False を入れてるのに、「変更を保存しますか?」と聞かれます。 SaveChanges:=False は意味がないのでしょうか? Application.Quit にしても同じく聞かれました。

  • Excel2010のマクロについて教えてください。

    今下記のマクロ Sub SHUURYOU() ActiveWorkbook.Save Application.Quit End Sub をabc.xlsmと言うシートに書き込みボタンに貼り付けました。 又他のBookにあるdef.xlsmと言うシートにも貼り付けました。 それぞれ単独で開き書き込みをしてマクロボタンを押せば保存して終了します。 しかしabc.xlsmとdef.xlsmが同時に開いていると一方のマクロを実行すると両方ともクローズしてしまいます。 このマクロを単独のシート(book)だけに有効にするにはどのようにマクロを書けばよいのでしょうか。 教えてください。

専門家に質問してみよう