こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

投稿日時 - 2005-04-26 15:22:20

QNo.1353228

困ってます

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

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

myBook1.Close True
でよいのでは?

投稿日時 - 2005-04-27 11:43:51

お礼

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

それもOKでした。

投稿日時 - 2005-04-27 13:52:42

ANo.7

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.6

補足しておきます。

>何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。

真に何も変更が加わっていない場合は、保存確認のメッセージは表示されないはずです。

それにも関わらず、メッセージが表示されるのは、なんらかの変更が加わったためでしょう。

例えば、TODAY関数などブックを開いた時点で再計算を行う関数が使われている場合、人の手による直接の変更がなくとも、EXCELは「変更あり」とします。

投稿日時 - 2005-04-27 00:17:12

ANo.5

>この場合は Application.DisplayAlerts = False でいいということになるのでしょうか?

保存しない場合があるのであれば、その通りです。
ブックを閉じるCloseメソッドの直前に

Application.DisplayAlerts = False

を入れ、閉じたあとに、

Application.DisplayAlerts = True

として元に戻してやります。

投稿日時 - 2005-04-27 00:07:22

ANo.4

#1です。補足しておきます。

> oExcel.DisplayAlerts = False

この文法は間違っています。DisplayAlerts プロパティーは Application オブジェクトのプロパティーですから、ワークシートに対して設定するものではありません。

> If myBook2.Name = "Data.xls" Then

この行でブックを特定する時点で「上書き保存」であることが特定できるのですから、SaveAs メソッドを使う必要がありませんし、ファイル名を指定する必要もありません。オリジナルコードを尊重し、Save メソッドが適当だと思います。
また、「上書き保存」の場合は DisplayAlerts プロパティーを操作する必要もないと思います。(アラートが表示されないので)

したがって、#1の回答となっています。

投稿日時 - 2005-04-26 23:29:59

補足

ご回答ありがとうございます。

保存しないで myBook1.Close だけしたいときはどうするのでしょうか?

何も編集を加えない場合も、myBook1.Closeの時点で保存しますか?と聞いてきます。

この場合は Application.DisplayAlerts = False でいいということになるのでしょうか?

投稿日時 - 2005-04-26 23:37:58

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

投稿日時 - 2005-04-26 19:04:09

補足

#1,#2,#3さんの方法でOKでした。ありがとうございました。

>エラーは、どのようなメッセージでしょうか?

エラーでなくて確認メッセージですね。

投稿日時 - 2005-04-26 19:35:08

お礼

勘違いでした。

myBook1.DisplayAlerts = False ってやると

実行時エラー 438
このオブジェクトは、このプロパティーまたはメソッドをサポートしていません。

となりますね。

投稿日時 - 2005-04-26 19:45:36

ANo.2

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

投稿日時 - 2005-04-26 16:15:53

ANo.1

こんにちは。
やりたいことは、上書き保存ですよね?

myBook1.SaveAs myBook1.FullName

myBook1.Save

に変更してみてください。

投稿日時 - 2005-04-26 16:12:30

あなたにオススメの質問