dポイントプレゼントキャンペーン実施中!

起動中の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

A 回答 (7件)

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


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

myBook1.Close True
でよいのでは?
    • good
    • 0
この回答へのお礼

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

それもOKでした。

お礼日時:2005/04/27 13:52

補足しておきます。



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

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

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

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

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



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

Application.DisplayAlerts = False

を入れ、閉じたあとに、

Application.DisplayAlerts = True

として元に戻してやります。
    • good
    • 0

#1です。

補足しておきます。

> oExcel.DisplayAlerts = False

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

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

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

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

この回答への補足

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

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

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

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

補足日時:2005/04/26 23:37
    • good
    • 0

通常は、こういうコードでよいわけですが、


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

この回答への補足

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

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

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

補足日時:2005/04/26 19:35
    • good
    • 0
この回答へのお礼

勘違いでした。

myBook1.DisplayAlerts = False ってやると

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

となりますね。

お礼日時:2005/04/26 19:45

自身はありませんが^^;


私は
Application.DisplayAlerts = False
でやってます
    • good
    • 0

こんにちは。


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

myBook1.SaveAs myBook1.FullName

myBook1.Save

に変更してみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています