• ベストアンサー

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

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

>保存しないで myBook1.Close だけしたいときはどうするのでしょうか? >この場合は Application.DisplayAlerts = False でいいということになるのでしょうか? myBook1.Close True でよいのでは?

noname#27115
質問者

お礼

ありがとうございました。 それもOKでした。

その他の回答 (6)

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

補足しておきます。 >何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。 真に何も変更が加わっていない場合は、保存確認のメッセージは表示されないはずです。 それにも関わらず、メッセージが表示されるのは、なんらかの変更が加わったためでしょう。 例えば、TODAY関数などブックを開いた時点で再計算を行う関数が使われている場合、人の手による直接の変更がなくとも、EXCELは「変更あり」とします。

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

>この場合は Application.DisplayAlerts = False でいいということになるのでしょうか? 保存しない場合があるのであれば、その通りです。 ブックを閉じるCloseメソッドの直前に Application.DisplayAlerts = False を入れ、閉じたあとに、 Application.DisplayAlerts = True として元に戻してやります。

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

#1です。補足しておきます。 > oExcel.DisplayAlerts = False この文法は間違っています。DisplayAlerts プロパティーは Application オブジェクトのプロパティーですから、ワークシートに対して設定するものではありません。 > If myBook2.Name = "Data.xls" Then この行でブックを特定する時点で「上書き保存」であることが特定できるのですから、SaveAs メソッドを使う必要がありませんし、ファイル名を指定する必要もありません。オリジナルコードを尊重し、Save メソッドが適当だと思います。 また、「上書き保存」の場合は DisplayAlerts プロパティーを操作する必要もないと思います。(アラートが表示されないので) したがって、#1の回答となっています。

noname#27115
質問者

補足

ご回答ありがとうございます。 保存しないで myBook1.Close だけしたいときはどうするのでしょうか? 何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。 この場合は Application.DisplayAlerts = False でいいということになるのでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

通常は、こういうコードでよいわけですが、 '--------------------------- 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から、という意味でしょうか? もし、そうなら、この方法は違いますね。 エラーは、どのようなメッセージでしょうか?

noname#27115
質問者

お礼

勘違いでした。 myBook1.DisplayAlerts = False ってやると 実行時エラー 438 このオブジェクトは、このプロパティーまたはメソッドをサポートしていません。 となりますね。

noname#27115
質問者

補足

#1,#2,#3さんの方法でOKでした。ありがとうございました。 >エラーは、どのようなメッセージでしょうか? エラーでなくて確認メッセージですね。

  • surounin
  • ベストアンサー率28% (30/106)
回答No.2

自身はありませんが^^; 私は Application.DisplayAlerts = False でやってます

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

こんにちは。 やりたいことは、上書き保存ですよね? myBook1.SaveAs myBook1.FullName を myBook1.Save に変更してみてください。

関連するQ&A