![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
EXCELマクロで台帳のシステムをつくっています。
台帳の入力が完了した後EXCELを閉じるタイミングで、
バックアップをとるために新しいブックを作成してデータを
コピーしたいと思い、Workbook_BeforeClose のなかで
新しいブックを作成する処理をいれました。
EXCELの右上のXで閉じたときには
うまく作成されるのですが、自作の終了ボタンから閉じたときには
Workbook_BeforeClose & 終了処理 には入るのですが新しいブックを作成する
箇所がスルーされてしまいます。
デバッグモードでみても該当箇所は通っているのですが、作成はされず
エラーになるわけでもありません。
いろいろ試してみましたがさっぱりわかりません。
詳しい方、教えてください。
・WINDOWS10
・EXCEL2013
・終了ボタンの処理
Sub ボタン6_Click()
ThisWorkbook.Close True
End Sub
・Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim rc As Boolean
rc = Application.Run("BOOK1.xlsm!終了処理")
If rc = True Then
Cancel = True
Exit Sub
End If
・BOOK1.xlsm!終了処理
・
・
・
Workbooks.Add.SaveAs FileName:=XXpass & "\XXXX.xls"
Worksheets.Add().Name = XXXX
・
・
No.1ベストアンサー
- 回答日時:
もう、私は、あまりVBAマクロは分からないけれども、少し、読んで試してみました。
今、Excel 2013をインストールしてないPCだから、新しいメソッドは分かりませんし、知りませんが、とにかく、Excel 2010 で考えてみました。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
rc = Application.Run("BOOK1.xlsm!終了処理")
If rc = True Then
Cancel = True
これでは、Close メソッドは利きません。Cacel =True は、「閉じる命令を止めます」という意味ですから。
Application.Quit では、マクロは、止めるようになっていませんから、動くでしょうね。
>バックアップをとるために新しいブックを作成してデータをコピーしたい
として、新しいブックを作成するというのは、
Workbooks.Add.SaveAs ということでしょうけれど、2013以降で、分からないから、旧式の書き方で恐縮ですが、考えてみました。
'//
'ThisWorkbook モジュール
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim fn As String
Dim mPath As String
On Error GoTo ErrHandler
'バックアップファイルは、孫を作らない
If InStr(1, ThisWorkbook.Name, "bk.", vbTextCompare) > 1 Then Exit Sub
With CreateObject("Scripting.FilesystemObject")
fn = .GetBaseName(ThisWorkbook.Name) & "bk" 'ベース名から、BackUp名を作る
End With
mPath = ThisWorkbook.Path & "\" '別フォルダのほうがよい
Cancel = True '命令を阻止
Application.EnableEvents = False
Application.DisplayAlerts = False
With ThisWorkbook
.Save '*
.SaveAs mPath & fn, xlOpenXMLWorkbookMacroEnabled '*
ActiveWorkbook.Close False 'ここは、必ず False です。
.Close False
End With
Application.DisplayAlerts = True
Application.EnableEvents = True
Exit Sub
ErrHandler:
MsgBox Err.Number & " :" & Err.Description
End Sub
'標準モジュールに念のためですが、
Sub Auto_Open()
Application.EnableEvents = True
End Sub
'//---
*の部分が、新しいメソッドで統合できると思います。
ありがとうございます。
紛らわしい書き方をしてしまって申し訳ありません。
rc = Application.Run("BOOK1.xlsm!終了処理")
If rc = True Then
Cancel = True
のCancelの判定は質問には関係ない点でした。
Private Sub Workbook_BeforeClose(Cancel As Boolean)のなかで
bookの作成をしようとすると、
Application.Quitから起動されたときは作成できるのに、
ThisWorkbook.Close から起動されたときは作成できない
(起動はします)ということです。
ThisWorkbook.Close で終わりたいときは、Close命令を
出す前にあらかじめbookを作成しておくということで
解決しました。(本当の解決ではありませんがとりあえず
希望どうりに動くということで良しとしました)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
VBScriptでのWord印刷
-
Ajaxの実行速度と読み方について
-
Javaプログラムからポップアッ...
-
数値の定数を付ける時
-
[Java] while(true)の意味
-
enumの使い方
-
COBOLの考え方からJavaへ
-
C#の処理をリアルタイムに表示...
-
処理実行後、終了させないで最...
-
GASで、起動時間の最大値を超え...
-
4人プレイの七並べGAMEを作りた...
-
JavaScriptからJAVAクラスを呼...
-
C#でバックグラウンド処理から...
-
setTimeOutとsetInterval、どっ...
-
素数判定を再帰処理で
-
0 == False はいいけど
-
下記のリストならno002が含まれ...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
doGetとdoPostの違い
-
Javaプログラムからポップアッ...
-
SwingUtilities.invokeLater(ne...
-
Javaでのデバッグコード削除
-
Tomcat高負荷時の設定について
-
JavaScriptからJAVAクラスを呼...
-
データ未入力時のエラー処理が...
-
アコーディオンメニューをアン...
-
ブラウザを閉じた後のサーバ側...
-
[Java] while(true)の意味
-
数値の定数を付ける時
-
Javaアプリケーション実行の返...
-
ラジオボタンの選択判定
-
onBlurとonFocusの処理順序につ...
-
スレッド1とスレッド2を交互に...
-
WPF C#でF10のイベント取得方法...
-
flush()メソッドについて・・・
-
ExcelVBA で文字列の特定の文字...
-
無限ループをわざと作って時計...
おすすめ情報
ThisWorkbook.Close True を Application.Quitにしたら
うまく動くことがわかりました。
でも、複数の台帳を開いていることがあるのでできれば
Close で閉じたいです。
EXCEL2013 のためなんでしょうか