- ベストアンサー
Excel VBAで確認なしで上書き保存
起動中のBookでファイル名が Data.xlsのものを閉じたいと思いますが、 上書き確認メッセージを出さないように oExcel.DisplayAlerts = False を設定すると エラーになります。 CreateObject で作成した場合は、DisplayAlerts が使えるようですが、 すでに起動済みのBookを確認なしで上書き保存するにはどうしたらいい のでしょうか? Sub UnloadFile() Dim myBook2 As Workbook Dim myBook1 As Workbook For Each myBook2 In Workbooks If myBook2.Name = "Data.xls" Then Set myBook1 = myBook2 myBook1.SaveAs myBook1.FullName myBook1.Close End If Next myBook2 Set myBook1 = Nothing End Sub
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>保存しないで myBook1.Close だけしたいときはどうするのでしょうか? >この場合は Application.DisplayAlerts = False でいいということになるのでしょうか? myBook1.Close True でよいのでは?
その他の回答 (6)
- KenKen_SP
- ベストアンサー率62% (785/1258)
補足しておきます。 >何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。 真に何も変更が加わっていない場合は、保存確認のメッセージは表示されないはずです。 それにも関わらず、メッセージが表示されるのは、なんらかの変更が加わったためでしょう。 例えば、TODAY関数などブックを開いた時点で再計算を行う関数が使われている場合、人の手による直接の変更がなくとも、EXCELは「変更あり」とします。
- KenKen_SP
- ベストアンサー率62% (785/1258)
>この場合は Application.DisplayAlerts = False でいいということになるのでしょうか? 保存しない場合があるのであれば、その通りです。 ブックを閉じるCloseメソッドの直前に Application.DisplayAlerts = False を入れ、閉じたあとに、 Application.DisplayAlerts = True として元に戻してやります。
- KenKen_SP
- ベストアンサー率62% (785/1258)
#1です。補足しておきます。 > oExcel.DisplayAlerts = False この文法は間違っています。DisplayAlerts プロパティーは Application オブジェクトのプロパティーですから、ワークシートに対して設定するものではありません。 > If myBook2.Name = "Data.xls" Then この行でブックを特定する時点で「上書き保存」であることが特定できるのですから、SaveAs メソッドを使う必要がありませんし、ファイル名を指定する必要もありません。オリジナルコードを尊重し、Save メソッドが適当だと思います。 また、「上書き保存」の場合は DisplayAlerts プロパティーを操作する必要もないと思います。(アラートが表示されないので) したがって、#1の回答となっています。
補足
ご回答ありがとうございます。 保存しないで myBook1.Close だけしたいときはどうするのでしょうか? 何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。 この場合は Application.DisplayAlerts = False でいいということになるのでしょうか?
- Wendy02
- ベストアンサー率57% (3570/6232)
通常は、こういうコードでよいわけですが、 '--------------------------- Dim myBook2 As Workbook For Each myBook2 In Workbooks If myBook2.Name = "Data.xls" Then Application.DisplayAlerts = False myBook2.Save 'As myBook2.FullName 'でも可能 myBook2.Close Application.DisplayAlerts = True End If Next myBook2 '--------------------------- >CreateObject で作成した場合は、DisplayAlerts が使えるようですが、 >すでに起動済みのBookを確認なしで上書き保存するにはどうしたらいい >のでしょうか? CreateObject という話が出てくることは、Excelからではないのですか? 外部のVBAやVBから、という意味でしょうか? もし、そうなら、この方法は違いますね。 エラーは、どのようなメッセージでしょうか?
お礼
勘違いでした。 myBook1.DisplayAlerts = False ってやると 実行時エラー 438 このオブジェクトは、このプロパティーまたはメソッドをサポートしていません。 となりますね。
補足
#1,#2,#3さんの方法でOKでした。ありがとうございました。 >エラーは、どのようなメッセージでしょうか? エラーでなくて確認メッセージですね。
- surounin
- ベストアンサー率28% (30/106)
自身はありませんが^^; 私は Application.DisplayAlerts = False でやってます
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 やりたいことは、上書き保存ですよね? myBook1.SaveAs myBook1.FullName を myBook1.Save に変更してみてください。
お礼
ありがとうございました。 それもOKでした。