- ベストアンサー
保存ボタンを押した瞬間に処理を実行したい
マクロ初心者です。いつもお世話になっております。 また困っているので助けてください。 Sheet1というシート上に、マクロを組み込んだコマンドボタン(押すと画像を選べるフォームが出てきて、クリックすることでセルに画像を挿入できる)等が複数あります。 現在、Sheet1で全ての作業が済んだ後、設置してある保存ボタンを押すと不要なコマンドボタン(button294など)とSheet1以外の不要なシートが全て削除され、「ファイル名を付けて保存」ダイアログが出てくるようにプログラムを組んでいます。 Sub 保存ボタン_click() Dim Filnam As String Dim SourceFile As String SourceFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name Filnam = GetFileName 'Worksheet上の不要なオブジェクト削除 ActiveSheet.Shapes("Button 294").Delete '"Sheet1"以外の不要シート削除 Application.DisplayAlerts = False For Each ws In Worksheets If ws.Name <> "Sheet1" Then ws.Delete Next Application.DisplayAlerts = True '名前を付けてファイルを保存 Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant 既定ファイル名 = "チラシ" & ".xls" 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名) If 保存ファイル名 = False Then MsgBox "保存は中止されました" Else ActiveWorkbook.SaveAs 保存ファイル名 Application.DisplayAlerts = True End If End Sub この動きに沿って素直に保存する分には特に問題はないのですが、保存をキャンセルした場合、もうボタンやシートが消えてしまっているため、作業中のシートに戻っても再び編集ができません…。 なので、保存ボタンを押すまではシート削除などの実行が待機され、ボタンを押した瞬間にプログラムが動くようにできないか? あるいは、保存を中止した場合は一つ前の操作の段階(シートやボタンや削除される前の状態)に戻ることはできないか? と考え悩んでいます。 是非お知恵をお貸しください。よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
下記のコードで確認しましたが、キャンセルすると "削除処理"と"保存処理"のメッセージは表示されませんが・・・(^^; 削除処理を移動させる場所を間違えてませんか? もう一度確認してみてください。 Else と End If の間にあれば、実行されないはずですよ。 Sub 保存ボタン_click() Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant 既定ファイル名 = "チラシ" & ".xls" 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名) If 保存ファイル名 = False Then MsgBox "保存は中止されました" Else MsgBox "削除処理" MsgBox "保存処理" End If End Sub
その他の回答 (2)
- nobu555
- ベストアンサー率45% (158/345)
マクロは、まだまだ半人前ですが、 >「保存を中止」以降も、組んであるプログラムがそのまま流れていってしまうようです。 >何とか止めることはできないのでしょうか?? 処理を終了させたいのでしたら、 MsgBox "保存は中止されました" の後に Exit Sub を付け加えたら如何でしょう。 そこで処理は終了します。
- venzou
- ベストアンサー率71% (311/435)
動作確認はしていませんが、 処理の順番を変えるだけで良いのでは? Sub 保存ボタン_click() Dim Filnam As String Dim SourceFile As String '名前を付けてファイルを保存 Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant 既定ファイル名 = "チラシ" & ".xls" 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名) If 保存ファイル名 = False Then MsgBox "保存は中止されました" Else SourceFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name Filnam = GetFileName 'Worksheet上の不要なオブジェクト削除 ActiveSheet.Shapes("Button 294").Delete '"Sheet1"以外の不要シート削除 Application.DisplayAlerts = False For Each ws In Worksheets If ws.Name <> "Sheet1" Then ws.Delete Next Application.DisplayAlerts = True ActiveWorkbook.SaveAs 保存ファイル名 Application.DisplayAlerts = True End If End Sub
補足
早速のご回答ありがとうございます。 しかし順番を変えるだけではダメなようです。 やはり素直に保存する分にはオッケーなのですが、保存を中止した途端に、ボタンやシートが消えてしまって作業ができなくなります。 「保存を中止」以降も、組んであるプログラムがそのまま流れていってしまうようです。 何とか止めることはできないのでしょうか??
お礼
お手数をおかけしました。解決できました!! ありがとうございました!