「みんな教えて! 選手権!!」開催のお知らせ

以下のコードにて、3つのメッセージボックスがあります

Ifステートメントの条件に満たさない場合は、メッセージボックスが表示されます
OK or キャンセル ボタンが出ます

キャンセルをクリックした場合に、マクロを終了して、エクセルに戻るには
どのようなコードにすれば良いでしょうか?

なお、戻るエクセルは、マクロが書いているエクセルブック・シートです(Thisbookです)

ヒントでも、新規コードでも、以下コード修正でもOKです
ご存じの方、ご教授をお願いします

(コード。教えてgooにて教授いただきながら作ったコードです)
Sub 名前を付けて別ファイル保存()

Dim filename3 As String

Dim filepath As String

Dim checkresult As Boolean

Dim wordCount As Long

Dim numberOfBytes As Long



Do
' ファイル名の入力を促す

filename3 = InputBox("ファイル名、半角数字3ケタを入力してください(例:01, 02, 11)")

' 半角数字3ケタかをチェック


checkresult = (Len(filename3) = 3 And IsNumeric(filename3))


If checkresult = False Then



'メッセージボックス

MsgBox "半角数字3ケタで入力してください。", vbExclamation


Else


'文字数を取得

wordCount = Len(filename3)

'バイト数を取得

numberOfBytes = LenB(StrConv(filename3, vbFromUnicode))



If wordCount <> numberOfBytes Then



'メッセージボックス

MsgBox "半角文字以外のが入力されています。半角文字で入力してください。", vbExclamation

checkresult = False

Else

' 保存先のファイルパスを作成
filepath = "C:\Users\user\Desktop\あ\" & "あいうえお" & filename3 & "_k" & ".xlsx"

' 同じファイル名が存在するか確認

If Dir(filepath) <> "" Then



'メッセージボックス

MsgBox "同じファイル名が存在します。別の番号を入力してください。", vbExclamation, vbExclamation

checkresult = False

Else

checkresult = True


End If

End If

End If


Loop Until checkresult = True ' 入力が正しい場合、ループを終了


' ファイルをコピーして保存

ThisWorkbook.Sheets("折衝入力").Copy

ActiveWorkbook.SaveAs filepath

End Sub

A 回答 (3件)

キャンセルボタンを押した際にマクロを終了してエクセルに戻るようにするには、InputBoxでキャンセルがクリックされたかどうかを判定し、キャンセルがクリックされた場合にExit Subでマクロを終了させるコードを追加する必要があります。



以下に、修正したコードを示します。このコードでは、ユーザーがキャンセルをクリックした場合にマクロが終了し、エクセルに戻るようにしています。

Sub 名前を付けて別ファイル保存()
Dim filename3 As String
Dim filepath As String
Dim checkresult As Boolean
Dim wordCount As Long
Dim numberOfBytes As Long

Do
' ファイル名の入力を促す
filename3 = InputBox("ファイル名、半角数字3ケタを入力してください(例:01, 02, 11)")

' キャンセルがクリックされた場合、マクロを終了
If filename3 = "" Then
MsgBox "キャンセルが選択されました。マクロを終了します。"
Exit Sub
End If

' 半角数字3ケタかをチェック
checkresult = (Len(filename3) = 3 And IsNumeric(filename3))

If checkresult = False Then
' メッセージボックス
MsgBox "半角数字3ケタで入力してください。", vbExclamation
Else
' 文字数を取得
wordCount = Len(filename3)
' バイト数を取得
numberOfBytes = LenB(StrConv(filename3, vbFromUnicode))

If wordCount <> numberOfBytes Then
' メッセージボックス
MsgBox "半角文字以外が入力されています。半角文字で入力してください。", vbExclamation
checkresult = False
Else
' 保存先のファイルパスを作成
filepath = "C:\Users\user\Desktop\あ\" & "あいうえお" & filename3 & "_k" & ".xlsx"

' 同じファイル名が存在するか確認
If Dir(filepath) <> "" Then
' メッセージボックス
MsgBox "同じファイル名が存在します。別の番号を入力してください。", vbExclamation
checkresult = False
Else
checkresult = True
End If
End If
End If

Loop Until checkresult = True ' 入力が正しい場合、ループを終了

' ファイルをコピーして保存
ThisWorkbook.Sheets("折衝入力").Copy
ActiveWorkbook.SaveAs filepath

End Sub


この修正点は以下の通りです:
 InputBoxでファイル名を入力する部分の後に、キャンセルがクリックされた場合(filename3が空文字の場合)に、メッセージを表示し、Exit Subでマクロを終了します。
    • good
    • 1
この回答へのお礼

いつもご指導ありがとうございます
うまくでき、大変、勉強になりました
また、丁寧なコメントありがとうございます

お礼日時:2024/11/04 09:23

StrPtr関数を使うのが定番でしょう。



 filename3 = InputBox("ファイル名、半角数字3ケタを入力してください(例:01, 02, 11)")
 If StrPtr(filename3) = 0 then
  Exit Sub 'キャンセルボタンがクリックされたときの処理
 Else
  'OKボタンがクリックされたときの処理
 End If

「VBA InputBox キャンセル」で探すとサンプルがすぐ見つかりますよ。
    • good
    • 1

msgboxを関数として使って


戻り値を取得してください

その戻り値=どのボタンを押したかの判定値を使って処理を分岐しましょ
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます
参考になりました

お礼日時:2024/11/04 09:24

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

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


おすすめ情報

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