• 締切済み
  • すぐに回答を!

EXCEL2007でワークブックのクローズ処理

教えてください。 EXCEL2003形式ファイルのVBAに、 Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.Close SaveChanges:=False End Sub を記述してファイルを保存します。(作成は、EXCEL2003で保存します。) (仮にBook1.xlsとします。) このファイル(Book1.xls)をEXCEL2007で開きます。 このとき、別のファイル(仮にBook2.xlsとします。形式は、EXCEL2003です)をEXCEL2007で開きます。 で、Book1.xlsを×ボタンで終了すると、 EXCEL2007が異常終了します。 環境依存でしょうか? PCの環境に、EXCEL2003とEXCEL2007が混在しています。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数456
  • ありがとう数0

みんなの回答

  • 回答No.2
  • onlyrom
  • ベストアンサー率59% (228/384)

再度のこんにちは。 >保存しないで閉じてもなん問題も発生しません 問題が発生しなければいい、ということではないのでは? これに限らず間違ったコードでたまたま上手くいったとしても いつどこでおかしい動作をするか分からないので 正しいコードで2007を試した後でないと 「互換性だけの問題か、環境依存の問題かを知りたいのです。」 これは無意味な質問になるのではないのですか! と言いたかったんですが、意図が通じていないみたいですねぇ ま、それは置いといて >右上の×ボタンで閉じた場合、どこでCloseを行いますか? 保存せずに終了したければ、 '----------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean)  ThisWorkbook.Saved = True End Sub '----------------------------------------------------- 以上です。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 【Excel VBA】 ブッククローズ時の動作について

    環境: WindowsXP Office2003 ThisWorkBookモジュールに、 Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ブックの保存を要求しない ThisWorkbook.Saved = True End Sub と記述しているのですが、保存の有無を聞かれます。 しかしながら、ブックにより聞かれない場合もあります。 原因として考えられるのは、どのようなことでしょうか?

  • 【Excel】BeforeCloseを毎回呼び出すには?

    終了時に独自で保存をしたいのですが、 下記のコードだと1回目でキャンセルすると 2回目以降の呼び出し時に全く実行されません。 どこか悪いのかご教示ください。 また、もしご存じであれば BeforeClose() と Auto_Close() の違い ThisWorkbook と Me の違い を教えてください。 よろしくお願いいたします。 Private Sub Workbook_BeforeClose(Cancel As Boolean)   Dim iAns As VbMsgBoxResult   iAns = MsgBox("'" & Me.Name & "' への変更を保存しますか?")   Select Case iAns   Case vbYes     Call WriteFile     ThisWorkbook.Close savechanges:=False   Case vbNo     ThisWorkbook.Close savechanges:=False   Case vbCancel     Cancel = True   End Select End Sub

  • アプリケーションも閉じたいのですが

    ブック(ファイル)だけじゃなくて アプリケーションも閉じたいのですが Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Close SaveChanges:=True End Sub としたのですが、実際閉じるのはブックだけでアプリケーションは開いたままです。 「ウインドウを閉じる」を押して、ブックだけが閉じるのはわかるのですが 図のようにアプリケーション閉じるボタンを押してもウインドウ(ブック)しか閉じません。 Private Sub Workbook_BeforeClose(Cancel As Boolean) ActiveWorkbook.Close SaveChanges:=True Application.Quit End Sub にしても結果は同じです。 しかし、Workbook_BeforeCloseイベントがないファイルなら、 アプリケーション閉じるボタンを押しても全て終了できます。 Workbook_BeforeCloseイベントを使っても アプリケーションも閉じる方法を教えてください。

  • 回答No.1
  • onlyrom
  • ベストアンサー率59% (228/384)

こんにちは。 >Book1.xlsを×ボタンで終了すると、 >EXCEL2007が異常終了します。 異常終了の前に、提示のコードがおかしくありませんか? BeforeCloseイベントで、なぜ再度Close? そこを修正してから2007で試したらどうでしょう。 以上です。  

共感・感謝の気持ちを伝えよう!

質問者からの補足

VBAで右上の×ボタンで保存せずに、エクセルファイルを閉じたいのです。 EXCEL2003の環境で、複数ファイルを開いた状態で、該当ファイルだけ 保存しないで閉じてもなん問題も発生しません。 互換性だけの問題か、環境依存の問題かを知りたいのです。 ちなみに、EXCEL2007でBook1.xlsを右上の×ボタンで閉じた場合は、EXCEL2007は正常に終了します。 右上の×ボタンで閉じた場合、どこでCloseを行いますか? エクセルVBAは、あまり得意でないのでよくわからないのです。

関連するQ&A

  • ExcelVBAで、クローズボタンの処理

    お世話になります。 通常、アプリ側ではApplication.DisplayAlerts = Falseにして、 ブックの終了などを制御しているのですが、 Excelのクローズボタンを押して終了するときは、この DisplayAlertsが有効にならないらしく、必ず上書き確認の ダイアログが表示されてしまいます。 これを… 1.上書き保存ダイアログを表示させない(上書き自体させない) 2.Excel本体のクローズボタンを無効にする 3.Excel本体のクローズボタンを非表示にする …などのどれかの方法を教えてください。 尚、現在はブックを閉じる直前で、下記のようなコードで 試みていますが、うまくいきません。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.DisplayAlerts = False End Sub 以上、宜しくお願い致します。

  • VBAでファイルを保存せずに閉じた後の他ブックの挙動

    初めて質問させていただきます。 VBA初心者の為、質問自体に不足があるかもしれませんが、ご協力をお願い致します。 エクセル2000(SP3)で複数のブック(仮にA.xls,B.xlsとします)を起動した状態で、Aをマクロを使って保存せずに終了させたところ、Bの操作が出来なくなります。(セル選択等もできません。Bのsheetを選択するとアプリケーションエラーになってしまいます) 同Windows上に他アプリケーションが起動している場合、それらを一度選択してから再度Excelを選択すると、Bの操作が可能になります。 保存せずに終了させる為のマクロは次のとおりです。 ブックAのThisWorkbook内に記述しています。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Workbooks.count = 1 Then Application.DisplayAlerts = False Application.Quit Else ThisWorkbook.Close SaveChanges:=False End If End Sub 以上、よろしくお願い致します。

  • エクセルVBAにて保存するとき

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("エクセルを終了してもよろしいですか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If Application.DisplayAlerts = False Application.Quit End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "そのボタンでは保存できません。" & vbCrLf & _ "雛形は残しておきましょう" & vbCrLf & _ "" & vbCrLf & _ "ツールバーの「マクロなし出力」から保存できます。" Cancel = True End Sub という二つのマクロをThisworkbookにいれてあるんですが、 この二つを有効(今は2つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?

  • VBAでExcelメニューの”閉じる”コマンドが押されたときに処理がしたいのですが

    Windows98、Excel2000上でVBAをいじっています。ユーザーフォームをメニュー画面にしてExcelのシートを切り替えるプログラムを作っています。 Excelメニューの"閉じる"コマンド、或いは右上の"×"ボタンを押されたときに"本当に終了しますか?"と表示させたいですがどのようにすればよろしいですか。 Workbook_BeforeClose(Cancel As Boolean)の中でやると良いといろんなサイトにありましたが、これをやると、ユーザーフォームを閉じるときに使っているApplication.Quitで無限ループしてしまいます。 というのはApplication.Quitが実行されるとWorkbook_BeforeClose(Cancel As Boolean)に飛んでしまうらしいのです。 どんな些細なことでもけっこうですので 宜しくお願い致します。

  • Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい

    Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい A.xls B.xls と二つのブックがあります。 A.xlsが閉じられる時、B.xlsも同時に閉じたいです。 A.xlsに以下のマクロを入れました。 Private?Sub?Workbook_BeforeClose(Cancel?As?Boolean) ?Workbooks("B.xls").Close?SaveChanges:=False End?Sub 問題はA.xlsが保存してない場合、「A.xlsへの変更を保存しますか?」というメッセー ジが 出てきますが、そこでキャンセルを押された場合でもB.xlsが閉じられてしまいます。 A.xlsが本当に閉じられた時だけB.xlsを閉じたいのですが そのようなことは可能でしょうか?

  • エクセル・ブック共有のファイル終了時に

    エクセルのVBA、万年初心者のものです。m(__)m エクセルのファイルをネットワーク上で「ブックの共有」で使いたいと思っているのですが、「ブックの共有」をオンにしていると、終了時に毎回「この場所に○○.xlsという名前のファイルが既にあります。置き換えますか?」と出てきます。 ファイル自体はマクロを有効にしていて、毎回、置き換える必要がないので「いいえ」しか選ばないので、なんとか、このメッセージをださないようにしたいのですが。 ThisWorkbook のPrivate Sub Workbook_BeforeClose の中に、Application.DisplayAlerts = False を入れてみたりしましたが、うまくいきません。 なにかいいメソッドがないでしょうか?

  • Excel VBA 終了時の処理

    Excelを終了時にフルスクリーン(リボンなどが非表示の状態)から解除するコードを書きたいのです。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.DisplayFullScreen = False 'フルスクリーン化解除 End Sub というコードを書きましたが、Excel自体を×ボタンでクローズした場合は正常に動きますが、 Excelを起動したままPCをシャットダウンすると解除されません。 次回Excelファイルを開くときにはフルスクリーンで出てきてしまいます。 シャットダウン時には、Excelも勝手にクローズされ、その際にマクロが動くものだと思っていましたが... これを回避するコードなどありましたらご教授ください。 環境:windows7 Excel2010 (2013でも動くようにしたいです)

  • フォームのボタンからのみexcelを終了したい

    おねがいします。 都合上、フォームのボタンからだけexcelを終了したのです。 Private Sub CommandButton1_Click() Application.DisplayAlerts=False Application.Quit End Sub それに伴い、 右上のexcelのxボタン、シートのxボタンを無効化または非表示にしたいです。 Private Sub Workbook_BeforeClose(Cancel As Boolean)      If CloseMode = 0 Then     Cancel = 1   End If End Sub これで、エクセルxボタンは無効になりましたが、 フォームからの終了も出来なくなってしまいました。 フォームからのみ終了する方法を教えてください。

  • エクセル/BeforeCloseイベントで保存できない!?

    エクセル2000です。 以下の_BeforeCloseイベントのマクロ(非常に簡略化してますが)ですが、標準モジュールに設定した Sub 終了() ActiveWorkbook.Close End Sub から終了させた場合、ActiveWorkbook.Saveの部分だけが働かないようです。 エクセル画面右上の×で終了させた場合は保存されます。 どうしてでしょうか? Private Sub Workbook_BeforeClose(Cancel As Boolean) With Sheet1 If .Range("A1") <> .Range("B1") Then ret = MsgBox("変更を保存しますか?" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "新:" & .Range("A1") _ + Chr(&HD) + Chr(&HA) + "旧:" & .Range("B1"), vbYesNo + vbQuestion, " 確認") If ret = vbYes Then ActiveWorkbook.Save '←なぜ保存されないの?! MsgBox "保存しました" ThisWorkbook.Saved = True ActiveWorkbook.Close (False) End If Else ThisWorkbook.Saved = True ActiveWorkbook.Close (False) End If End With End Sub

  • VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには?

    VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。