• ベストアンサー

保存ボタンを押した瞬間に処理を実行したい

マクロ初心者です。いつもお世話になっております。 また困っているので助けてください。 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 この動きに沿って素直に保存する分には特に問題はないのですが、保存をキャンセルした場合、もうボタンやシートが消えてしまっているため、作業中のシートに戻っても再び編集ができません…。 なので、保存ボタンを押すまではシート削除などの実行が待機され、ボタンを押した瞬間にプログラムが動くようにできないか? あるいは、保存を中止した場合は一つ前の操作の段階(シートやボタンや削除される前の状態)に戻ることはできないか? と考え悩んでいます。 是非お知恵をお貸しください。よろしくお願い致します。

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.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

lightheart
質問者

お礼

お手数をおかけしました。解決できました!! ありがとうございました!

その他の回答 (2)

  • nobu555
  • ベストアンサー率45% (158/345)
回答No.2

マクロは、まだまだ半人前ですが、 >「保存を中止」以降も、組んであるプログラムがそのまま流れていってしまうようです。 >何とか止めることはできないのでしょうか?? 処理を終了させたいのでしたら、 MsgBox "保存は中止されました" の後に Exit Sub を付け加えたら如何でしょう。 そこで処理は終了します。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

動作確認はしていませんが、 処理の順番を変えるだけで良いのでは? 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

lightheart
質問者

補足

早速のご回答ありがとうございます。 しかし順番を変えるだけではダメなようです。 やはり素直に保存する分にはオッケーなのですが、保存を中止した途端に、ボタンやシートが消えてしまって作業ができなくなります。 「保存を中止」以降も、組んであるプログラムがそのまま流れていってしまうようです。 何とか止めることはできないのでしょうか??

関連するQ&A

専門家に質問してみよう