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

このQ&Aのポイント
  • エクセルのVBAマクロを使用して保存して終了する処理が正常に動作しない問題が発生しています。マクロを実行しても画面が一瞬点滅するだけで上書き保存や終了がされず、別の名前で保存したファイルでも同様の問題が発生します。他のマクロは正常に動作しているため、保存して終了させるマクロのみが影響を受けている可能性があります。
  • 複数の保存して終了するマクロの書き方を試しましたが、いずれも正常に動作せず、手動での保存や終了はできることが確認されています。問題が発生してから別の名前で保存したファイルでも同様の問題が続くため、ファイルの状態やマクロの内容が影響している可能性が考えられます。
  • 質問者はエクセルのマクロで保存して終了する処理が正常に動作しない問題に遭遇しています。マクロを作成し、実行すると一度は正常に動作するが、二度目以降は画面が一瞬点滅するだけで上書き保存や終了がされません。また、他のマクロは正常に動作しており、この保存して終了するマクロだけが問題を抱えています。手動で保存や終了することは可能ですが、マクロを使用する場合に問題が発生しています。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • starsip
  • ベストアンサー率36% (22/60)
回答No.8

#7です。補足を拝見しました。 質問者様の仰る通りで、間違いないと思います。 >とすべて記述された状態のWorkbookが保存されるのではないでしょうか? >試しに、別の名前をつけて保存しこのマクロが正常に動作する状態にして、 >もう一度開いて、モジュールを見ても上記の記述が全部残っていました。 私の場合、 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) で、Save前の動作を制御(記述)した時、Save後のマクロが保存されない事が あったので、あるいは・・と思いました。失礼しました。 > あと、これが関係あるのか分かりませんが、この問題のファイルは、 >別のPCの共有フォルダより呼び出して使用していますがこれは関係あるのでしょうか? 共有ファイルの保存は私も悩みました。 ProtectSharing とか・・ 思うような動作にならず・・ もし、コードを提示出来るのであれば、お願いします。 参考になるかもと思い、URL載せますね。

参考URL:
http://www.officetanaka.net/excel/vba/file/file03.htm
potbelly90
質問者

お礼

 お礼が遅くなり大変申し訳ありません!  とりあえず、解決しました。、、、実は、 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  に、シートに”UserInterfaceOnly”の保護をかけるマクロを作っていました。どうやらそれが原因だったみたいで、削除したら直りました。(でもそれが何でいけないのか分からないけど…)  代わりに、Private Sub Workbook_Open()にシートに”UserInterfaceOnly”の保護をかけるマクロを貼り付けました。  載せて頂いたURLは読ませていただきました。天下のマイクロソフトの作ったソフトにもバグなんてあるんですね。世間知らず(?)でした^^;

その他の回答 (8)

  • starsip
  • ベストアンサー率36% (22/60)
回答No.9

解決出来たとの事、お疲れ様でした。 解決しているので、既に回答ではありませんが・・・ >Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) >に、シートに”UserInterfaceOnly”の保護をかけるマクロを作っていました。 >削除したら直りました。 基本、そうして直していくしかないのかな・・と、思います。 自分が解っていないと直せないし、プログラム出来ないですもんね。 >(でもそれが何でいけないのか分からないけど…) 私も全ては解りませんが、希望の動作が出来ればいい。位に考えています。 >天下のマイクロソフトの作ったソフトにもバグなんてあるんですね。 そうですよね。 でも、全てのユーザーの全ての希望は把握出来ないでしょうし、 もし、自分でOSのプログラム作成なんて出来ないし・・・ 反対にユーザー(私を含め)でもプログラム出来る(VBA VBなど)ように している(というOfficeプログラムにしている)MSに感謝しておきましょう。 私もVBAは勉強中ですが、優しく教えてもらえる 「教えて!goo 」はいいですよね。 とりあえず、お礼への返事です。----

potbelly90
質問者

お礼

>私も全ては解りませんが、希望の動作が出来ればいい。位に考えています。  そうですね、白黒ハッキリさせようと躍起になって袋小路に嵌ってたような気がします。私もそう考えるようにします。  お蔭様で会社の者皆がボタンクリックで誰でも簡単に使えるものが完成し、活用してもらってます。解決したので回答を締め切りますね。  ここで回答頂いた皆さんに感謝!感謝です!  特にstarsipさんにはずっとお付き合いいただき大変ありがとうございました。

  • starsip
  • ベストアンサー率36% (22/60)
回答No.7

#1 #5 です。 >Sub 保存して終了() >ActiveWorkbook.Save 'ここで保存します。下記の ActiveWorkbook.close は保存していません。 '( 保存した後の動作を記述しているだけです。 ) >ActiveWorkbook.close >End Sub 保存したのは”アクティブワークブックを保存する”記述です。 次回開いても(何回開いても)覚えているのは(Saveする)迄です。 ActiveWorkbook.Close は保存していません。 不明点あれば、補足下さい。

potbelly90
質問者

補足

Sub 保存して終了() ActiveWorkbook.Save ↑上の記述でセーブされるのはあくまで上の記述までで、 ↓下の記述は保存されないので次から開く時は閉じなくなる…って解釈でよろしいでしょうか? ActiveWorkbook.close End Sub しかし、このマクロでWorkbookを保存する時には、 Sub 保存して終了() ActiveWorkbook.Save ActiveWorkbook.close End Sub とすべて記述された状態のWorkbookが保存されるのではないでしょうか?試しに、別の名前をつけて保存しこのマクロが正常に動作する状態にして、もう一度開いて、モジュールを見ても上記の記述が全部残っていました。  あと、もうひとつ気づいたのですが手動で上書き保存をした後であれば保存して(すでに上書き保存されているのでマクロで本当に保存されているかは不明ですが)終了することが分かりました。  あと、これが関係あるのか分かりませんが、この問題のファイルは、別のPCの共有フォルダより呼び出して使用していますがこれは関係あるのでしょうか?

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.6

No.2です。 一回目、二回目の意味をもう少し詳しく教えてください。 一度マクロを実行すると、ブックは閉じる訳ですから、またそのブックを開いてマクロを実行するのですね。 それなら毎回一回目であって、二回目というものがないような気がするのですが。 貴方のおっしゃる一回目とは、何?ですか。

potbelly90
質問者

お礼

おかげ様で何とか動くようになりました。 回答ありがとうございました。

potbelly90
質問者

補足

 そうですよね^^;紛らわしい表現でした。  1回目は、まず”ファイルを別の名前をつけて保存”し、そのファイルを終了。また、その別の名前をつけて保存したファイルを開いてから、マクロを動かす時です。  その1回目は正常に作ったマクロが動作するのでちゃんと、”保存して終了”します。  2回目は、その1回目のマクロで閉じたファイル(別の名前をつけて保存したファイル)をもう一度開き、マクロを動かす時です。

  • starsip
  • ベストアンサー率36% (22/60)
回答No.5

#1です。 >”終了.保存して終了”・・・と表示されているのです。 Bookを複数開いていませんか。 複数開いていれば "終了"という名前のブックの"Sub 保存して終了()" という事で >”終了.保存して終了” と表示されたと記憶しますが。 標準モジュールでなく、ThisWorkbook 内に記述すれば良い気がします。 自身(VBAを記述しているブック)を保存してから終了するならば、ThisWorkbook 内に Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.Save End Sub  としておいて、Close のマクロをロードすればよいのでは・・ ( もしくは×ボタンで閉じるだけ ) 自身(VBAを記述しているブック)を保存するのではなくて、 他のブックを保存終了させるのならば 話は違ってきます。

potbelly90
質問者

補足

 Bookはそのファイルしか開いてません。  BeforeCloseに保存するマクロはイザという時に保存しないで終了もさせたいので、あえて止めました。  あと、このマクロは自身を保存するマクロです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#2>終了.保存して終了”のように、モジュール名.マクロ名、と表示されているのです 通常だと、別モジュールに同じ名前がある場合にこのようにモジュール名を修飾して表示されます。 なので、本来であれば、 終了.保存して終了 TEST.保存して終了 の様に重複して表示されるはずですが、 1つだけということなので、マクロがおかしくなっているのかもしれません。 マクロのエクスポートを行って、 新しいブックにインポートしてみたらどうでしょう。

potbelly90
質問者

お礼

 ありがとうございます。実は、月曜日に仕事に出るまでそのエクセルファイルを触ることが出来ないので、月曜に出社したら、即試して見ます!  今日が金曜日であることを忘れてて、困り度3にして、皆さん急いで回答くださるのに試せないことに気づきました。迂闊でした。  ここをお借りして皆さんにお詫び申し上げますm(__)m

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

> 上書き保存も終了もしません。 ブックに変更がなければ、Save メソッドは働かないですが、その辺は OK ですか? 前回の保存時からブックに変更があったかどうかは、 IF ThisWorkbook.Saved Then   MsgBox "変更なし" Else   MsgBox "変更あり" End If で調べることができます。 > .... 終了させるマクロだけが変なのです。 終了とは? ・ブックを閉じるだけで Excel は残す? ・ブックも閉じるし、Excel も終了させる? ・同時に開いているブックはある? この辺の状況でコーディングが変わってきますので、補足して下さい。

potbelly90
質問者

お礼

おかげ様で何とか動くようになりました。 回答ありがとうございました。

potbelly90
質問者

補足

>ブックに変更がなければ、Save メソッドは働かないですが、その辺は OK ですか?  はい、試しに何か入力してマクロを動かしても同じでした。  終了の方法は、「ブックを閉じるだけで Excel は残す」です。  今までに同じ、保存して終了させるマクロは書いて何度も使ったことあるのですが、今回のようなことは初めてです^^;

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.2

Sub 保存して終了() のマクロは、これと同じWorkbookに書いてあるのですね。 それとも、マクロのファイルと実際に保存して終了させたいファイルは別々ですか。

potbelly90
質問者

お礼

 ありがとうございました。

potbelly90
質問者

補足

 回答ありがとうございます。  はい、同じWorkbookに書いてあります。VBAで、プロジェクトエクスプローラで、ThisWorkbookを右クリックして標準モジュールを挿入してそこに書きました。  モジュールは他にも作ってマクロの種類ごとにモジュールに名前をつけて分けました。  それで新たに気づいたのですが、Alt + F8 でマクロを起動したり、ボタンなどにマクロを登録する時、マクロ名の一覧が出てそれを選んで実行(登録)しますよね。その時のマクロ名の一覧で”保存して終了”のマクロ名だけ”終了.保存して終了”のように、モジュール名.マクロ名、と表示されているのです。試しに同じWorkbookの他のモジュールにマクロを貼り付けても同じ現象が起きます。一体何なんでしょう…。

  • starsip
  • ベストアンサー率36% (22/60)
回答No.1

こんにちは Thisworkbook.Save Thisworkbook.Close では、どうですか?

potbelly90
質問者

お礼

回答ありがとうございます。 それもやってみたけど駄目でした。

関連するQ&A

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

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

  • Excel 終了マクロ

    Excel で終了マクロを作ってみましたが、途中で次のメッセージが出てしまいます。 「実行時エラー'424' オブジェクトが必要です」 どう直したらよいか、教えて下さい。よろしくお願いします。 Sub Macro1() With ActiveWorkbook If MsgBox("終了します") = vbOK Then Set dbsTemp = Nothing ActiveWorkbooks.Close End If End With End Sub

  • エクセル マクロで自動実行と終了について

    エクセルで作ったマクロを自動実行・自動保存・自動終了したいので、下記のような 記述のマクロをつくり、Windowsのタスク処理で1回/日実行させようとしています。 ----<ここから>------------------------------------ Sub Auto_Open()    :   :   Workbooks("ekuseru.xls").Close SaveChanges:=True End Sub ----<ここまで>------------------------------------ 質問その1  マクロを編集したい場合はどうすればいいのでしょう?  そのBookを開くとマクロが動き出し、保存した上で終了してしまいます。  マクロ無効でBookを開くと「ツール」⇒「マクロ」⇒「マクロ」で「編集」はクリッ  クできないようになってます。 質問その2  マクロが終了するとき、Bookは閉じますがエクセル自体は閉じません。  (意味通じますか?)  エクセル自体を閉じるにはマクロの記述はどうすればいいのでしょう? 以上、よろしくお願いします。

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

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

  • 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 いずれもだめでした 良い方法をお教えください。

  • 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 いずれもだめでした 良い方法をお教えください。

  • マクロExcel2003日付を付けてファイルを保存

    Excel2003でマクロを利用して、日付を付けた形でファイルを保存するようにしたいです。 条件としては、 (1)ファイルをz:\に「【ここに日付を八桁で保存】File1.xls」とする 例えば、20111127File1.xls (2)上書きする場合も、確認をせずに強制的に保存 (3)保存が終わったら、強制的にExcel2003を終了する という具合に書きたいです。 マクロの保存でやってみてわかっている所まで書きました。 Sub SaveEnd() ActiveWorkbook.SaveAs Filename:="Z:\【????】file1.xls", FileFormat:=xlNormal   【上書き保存で、確認をしない】   【Excel2003の強制終了】 End Sub どのように調べれば良いかも含めて、ご指導をいただければ幸いです。

  • VBAでエクセル終了

    エクセル2000です。 VBAで「閉じる」ボタンを作りました。 Sub closeボタン() myYN = MsgBox("終了しますか?", vbYesNo + vbQuestion, "終了確認") If myYN = vbNo Then Exit Sub ThisWorkbook.Close End Sub ところが作動させると「いいえ」を選ぶとすんなり終了してくれますが、「はい」にすると「変更を保存しますか?」を何故か続けて2回も聞いてきます。 2回目も「はい」にすると今度はブック保存のダイアログが出てきて、ブック名が「:」(半角コロン)になってます。 変だなあ、と思い上記のマクロを別ブックを新たに作って標準モジュールに張ってみると正常に作動します。 もとのブックに何かあって、こんな現象が起きているのでしょうか? とっても困ってます。

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

  • Excelマクロで終了

    Excel2007 でマクロで教えて下さい。 今、ExMac1(book) と言うマクロから、ExMac2(book)のサブルーチンを起動しています。 呼ばれたExMac2の最後で、ExMac2を終了する命令を記述すると、全てのマクロが終了して しまいExMac1に制御が戻ってきません。 これは仕様かと思い、呼び出されたExMac2からExMac1を終了させてExMac2の続きを と思いましたが、やはり全てのマクロが終了していまいます。 ちょっと分かりずらい説明で申し訳ありませんが、どうにかして指定したbookマクロだけを 終了させたいのですが、ご教授ください。  呼び出す側  ExMac1 : Application.Run "'ExMac2.xlsm'!main_Click" : end  呼び出される側  ExMac2 sub main_Click : Workbooks("'ExMac1.xlsm'").Close SaveChanges:=False ....(1) msgbox "続き" ....(2) : end  (1)が実行されると、全てのマクロが終了され(2)が  実行されません。

専門家に質問してみよう