• ベストアンサー

VBAで、強制保存してブックを閉じるには?

私の持っている書籍によると、 ActiveWorkbook.Close SaveChanges:=True これで、上書き保存してクローズしてくれると思っているのですが、 ファイル指定のダイアログが表示されて、ファイル名の指定を促されます。 もちろん、ファイル名はすでについています。 また、上書き保存を指定しているつもりなのに、保存ボタンを押すと 上書きするか?と聞いてきます。 ダイアログなど表示せずに、静かにクローズしてほしいのですが、 どうすれば良いのでしょう?

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

  • ベストアンサー
  • wogota
  • ベストアンサー率42% (66/154)
回答No.2

手元にExcelがないのですが、業務で使用している者です。 いろいろ調べてみると、確認ダイアログを表示しないようにする Application.DisplayAlerts= Flase が、あるようです。これを利用してみてはいかがでしょうか。 また、ファイル名が確定しているのにファイル名指定を促される場合、 もしかしたら、マクロによってCloseしようとしているのが、目当ての ファイル(ブック)ではなく、別の新規ファイルということはないでしょうか。 保存ボタンを押すと上書き確認が出る場合は、そのファイルのいずれかの シートに、DATE・TIMEなどといった、開くごとにセル内容の変更が行われる 数式・マクロが含まれていませんでしょうか。 業務での使用している限りでは、共有にしていてオートフィルタをかけているとき 開くごとに変更が行われるので、閉じるときに上書き確認が表示されます。 的外れでしたら申し訳ありませんが、いかがでしょうか。

kaz-sugi
質問者

お礼

本件自体は解決していませんが、 そもそもの処理を別方式にしたことにより、 問題がなくなりました。 お付き合いいただき、ありがとうございました。 今後ともよろしくおねがいいたします。

その他の回答 (3)

  • ykym
  • ベストアンサー率22% (8/35)
回答No.4

こんばんは 下記の方法で保存後終了します。 'ワークブックを上書き保存 ActiveWorkbook.Save 'ワークブックを閉じる ActiveWorkbook.Close 'Excelを終了 Application.Quit です。

kaz-sugi
質問者

お礼

本件自体は解決していませんが、 そもそもの処理を別方式にしたことにより、 問題がなくなりました。 お付き合いいただき、ありがとうございました。 今後ともよろしくおねがいいたします。

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.3

確認メッセージの非表示は、wogotaさんの方法で出来ますよ。 更に追加で1件ほど、DisplayAlertsをfalseにしたままにしておくと excelが終了するまでその状態が続きますので必ずマクロ終了前にtrueに 戻しておく事を忘れないで下さい。 保存するのを忘れて閉じるをしてしまうと保存せずに終了してしまいますので。 '確認メッセージの非表示 Application.DisplayAlerts = Flase ~ここに、処理~ '確認メッセージの表示 Application.DisplayAlerts = true

kaz-sugi
質問者

お礼

本件自体は解決していませんが、 そもそもの処理を別方式にしたことにより、 問題がなくなりました。 お付き合いいただき、ありがとうございました。 今後ともよろしくおねがいいたします。

  • ykym
  • ベストアンサー率22% (8/35)
回答No.1

Save メソッドを使います。 ActiveWorkbook.Save です。

kaz-sugi
質問者

お礼

本件自体は解決していませんが、 そもそもの処理を別方式にしたことにより、 問題がなくなりました。 お付き合いいただき、ありがとうございました。 今後ともよろしくおねがいいたします。

kaz-sugi
質問者

補足

回答ありがとうございます。 保存はされるようですが、ブックは閉じないようです。 ちなみに、やりたい(かつ試した)のはこんな感じです。。。 Worksheets(sheet).Copy ActiveWorkbook.SaveAs Filename:=PathName, FileFormat _ :=xlText, CreateBackup:=False ActiveWorkbook.Save ' ActiveWorkbook.Close SaveChanges:=True

関連するQ&A

  • 新しく作成したBOOKを上書き保存

    いつも大変お世話になっております。 新規作成したBOOKを指定の場所に、指定の名前で保存しようとしています。 例)C:\ファイル名.xls 保存したいものの sFileName="C:\ファイル名.xls" WorkbookName="ファイル名.xls" ActiveWorkbook.SaveAs Filename:=sFileName '保存して閉じる Workbooks(WorkbookName & "_" & sNowTime & ".xls").Close SaveChanges:=True 上記のように設定したところ、 既にファイルがある場合はウィンドウが表示されます。 その際、MsgBoxにフルパスで表示されてしまい、大変見づらく困っています。 また、新規作成したブックは必ず上書き保存で良いものになっています。 C:\ファイル名.xls というものが既にある場合は、 メッセージを出さず、上書き保存にしたいと思っています。 下記のように、既にブックがあるかも確認したのですが、 違い?が良く分からず、上手くいきませんでした。 '======================使わない上に、プログラムが間違っているためコメントアウトしてます。=========-- 'Dim buf As String ' buf = Dir(sFileName) 'ファイルの存在を調べる ' If buf <> "" Then ' '保存 ' ActiveWorkbook.SaveAs Filename:=sFileName '保存して閉じる ' ' '=================ファイル作成完了 ' Else ' ActiveWorkbook.SaveAs Filename:=sFileName '保存して閉じる ' Workbooks(WorkbookName & "_" & sNowTime & ".xls").Close SaveChanges:=True ' End If '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 質問内容がぐちゃぐちゃしてきたので、まとめさせて頂きます。 ●新規ブックを指定場所に、指定名で保存したい ●指定場所に指定名のブックがあった場合、メッセージを出さずに上書き保存したい です、よろしくお願いいたします。

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

  • Excel2000と2010で処理を同じにしたい

    初めて投稿する kobutori_2011 です。 サンプルファイル等を参考に、EXCEL2000のVBAを使って、ファイルの更新処理を行っていました。 更新後のファイル書込み処理がExcel2000 と Excel2010で変わってしまい困っています。 Excel2000のVBAではファイル書込み処理として、下記の記述を使用していました。 ActiveWorkbook.Close SaveChanges:=True EXCEL2000では、この処理を実行する際、何事もなく(裏で上書き)処理されていたのですが、 EXCEL2010では、ダイアログボックスが表示され、 コピーファイルを作成するように表示されるようになりました。 色々、試行錯誤して、下記のようにプログラムを書換えたところ、ダイアログボックスが表示され、 上書き保存[OK]で同一ファイルが更新されるようになりました。 If gReadOnly = True Then ActiveWorkbook.Close SaveChanges:=False Else ActiveWorkbook.Close SaveChanges:=True, FileName:=gReadFile End If ダイアログボックスを表示させずに、EXCEL2000のように上書き保存させる方法を ご存知の方がいらっしゃいましたら、教えてください。 もしかすると、プログラム自体の問題ではなくセキュリティ設定の違いとか、 的はずれの修正を行っているかもしれませんが、宜しくお願いします。 以上

  • エクセルのマクロで新規に作成したブックを保存したい

    現在、開いたブックを保存しようとすると、ファイルタイプが.txtの状態で保存しようとするウィンドウが出ます。 ファイルタイプを".xls"で、自動的に(ダイアログを出さずに)保存したいのですが、保存時にファイルタイプの指定などできるのでしょうか。 Afterbook.Close SaveChanges:=True 現在は上記のメソッドで行っております。

  • VBA 保存

    保存ボタンを作成してファイルに飛ぶように させていますが…どうしてもエラーになります! エラー表示内容> 実行時エラー1004 シートの名前を他のシート、Visual Basicで参照される オブジェクト ライブラリまたは ワークシートと同じ名前に変更することはできません。 下記は実際の記述です。 Private Sub 保存_Click() Dim FileName As String Dim FileExt As String Dim BkName As String Dim OldWkbook As Workbook Dim NewWkbook As Workbook Const StName1 As String = "計画 グラフ" Const StName2 As String = "ケア一覧" ' Application.DisplayAlerts = False Set OldWkbook = ActiveWorkbook ' 'ファイル名を取得 BkName = OldWkbook.Sheets(StName1).Range("D1").Value FileName = BkName & Format(Now, "yyyy-mm-dd") & ".XLS" ' FileName = InputBox(FileName & "と言う名前で保存します" & vbCr & "よろしければこのままOKをクリックしてください", "保存ファイル名の確認", FileName) If FileName = "" Then Exit Sub Else If Right(FileName, 4) <> ".XLS" Then MsgBox "ファイル名が異常です。" Exit Sub End If End If ' OldWkbook.Sheets(Array(StName1, StName2)).Copy Set NewWkbook = ActiveWorkbook For wIx = 1 To NewWkbook.Sheets(1).Shapes.Count NewWkbook.Sheets(1).Shapes(1).Delete '←シート1のボタンを削除 Next NewWkbook.Sheets(1).Name = StName1 NewWkbook.Sheets(2).Name = StName2 ' FileName = "D:\看護計画保存\" & FileName ' If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close savechanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName End If ' NewWkbook.Close savechanges:=False Application.DisplayAlerts = True End Sub

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

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

  • Close SaveChanges:=False

    Windows(ActiveWorkbook.Name).Close SaveChanges:=False '保存せずに閉じる とやっているのに、 「’ファイル名’への変更を保存しますか?」 はい いいえ キャンセル が表示されます。 なぜvbaコードが無視されるのでしょうか?

  • vba ブックを変更しないで閉じたい

    ブックを開き、 Sub Macro2() Application.DisplayAlerts = False 'セルをいじる処理(A1に「あ」を入れるなど) '・・・ Windows("ブック1.xls").Activate ActiveWorkbook.Close SaveChanges:=False End Sub を実行すると変更があっても何も表示されないで閉じるはずですが とあるブックのみ、 「'ブック1'を保存しますか?」 はい いいえ キャンセル が出ます。 同じコードをブックに対して行なっているのに、実行できる場合と出来ない場合があるのでしょうか?

  • accessでexcelのvbaを

    今現在は、 objEXCEL.Range("A2:iv65536").Select objEXCEL.Selection.ClearContents objEXCEL.Range("A1").Select objEXCEL.Selection.QueryTable.Refresh BackgroundQuery:=False まで書き込んでいます。 ここまではうまくいきます。 この後に、CSVに名前を変えて上書き保存するコードを入れたいのですが、どうしてもうまくいきません。 下のようなコードを入れてみました。 objEXCEL.ActiveWorkbook.Close SaveChanges:=True, _ objEXCEL.Filename:=ActiveWorkbook.Path & "test.csv" どのように書き込んでいけばいいのでしょうか? VBAは初心者ですが、よろしくお願い致します。