1つだけ過去を変えられるとしたら?

マクロ初心者です。いつもお世話になっております。
また困っているので助けてください。

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

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/08 15:09

マクロは、まだまだ半人前ですが、


>「保存を中止」以降も、組んであるプログラムがそのまま流れていってしまうようです。
>何とか止めることはできないのでしょうか??
処理を終了させたいのでしたら、

MsgBox "保存は中止されました"
の後に

Exit Sub

を付け加えたら如何でしょう。
そこで処理は終了します。
    • good
    • 0

動作確認はしていませんが、


処理の順番を変えるだけで良いのでは?

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

この回答への補足

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

補足日時:2007/05/08 11:41
    • good
    • 0

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