プロが教える店舗&オフィスのセキュリティ対策術

EXCEL VBAでご教示頂けると嬉しいです。

個人用マクロブックに以下のようなマクロを組みました。
アクティブブックのB/Sシート、P/Lシートのデータをクリアしてから、新しいデータを張り付けるのが目的です。

************************
Dim tempSH
sub 貼付け()
tempSH = "BSシート"
Worksheets(tempSH).Select
Call シートの削除 ・・・・・・・①
Call BSデータを貼付

tempSH = "PLシート"
Worksheets(tempSH).Select
Call シートの削除
Call PLデータを貼付
End Sub
************************

「シートの削除」プロシージャでは、
msgboxのvbYesNoで削除確認を行っています。

最初の①「シートの削除」プロシージャで「キャンセル」をすると、
Exit subになるのでその「シートの削除」プロシージャは抜けられますが、
そのあとのプロシージャのmsgboxがすべて出てきてしまいます。
①でキャンセルをしたときに、そのあとのプロシージャを実行しない方法がありましたらご教示お願いいたします。

A 回答 (6件)

シートの削除プロシージャの確認部分を以下のようにしてください。


If MsgBox("確認", vbOKCancel) = vbCancel Then
End
End If

Endが実行されるとマクロ全体が停止します。
    • good
    • 0

No.3 4の訂正です 度々申し訳ない


「Dim 停止 As Balloon」は「Public 停止 As Balloon」ですよね
本当に申し訳ございません
    • good
    • 1

No.3 訂正(文字抜けしてました)


「Sub …」のすぐ後に「Dim 停止 As Balloon」を作っておいて、停止したい時に「停止 = True」を実行して「Call …」のすぐ後に「If 停止 Then Exit Sub」を入れればよいのでは?
    • good
    • 0

「Sub …」のすぐ後に「Dim 停止 As Balloon」を作っておいて、停止したい時に「停止 = True」を実行して「Ca

ぐ後に「If 停止 Then Exit Sub」を入れればよいのでは?
    • good
    • 0

「シートの削除」プロシージャで戻り値を返すようにして呼び出し元で処理が行われたのかキャンセルされたのかを判定できるようにして、呼び出し元では戻り値を判定して次の処理に行くか処理を終了するかを振り分けるのが一般的手法ですね。

    • good
    • 1

「シートの削除」プロシージャで、こんな感じにしたらいかがでしょう。



ans1 = MsgBox("処理を続けますか?", vbYesNoCancel)
If ans1 = vbCancel Then Exit Sub
MsgBox ("続けます")
・・・・
・・・・

ってことじゃなくて?
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A