
以下のコードにて、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
No.2ベストアンサー
- 回答日時:
キャンセルボタンを押した際にマクロを終了してエクセルに戻るようにするには、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でマクロを終了します。
No.3
- 回答日時:
StrPtr関数を使うのが定番でしょう。
filename3 = InputBox("ファイル名、半角数字3ケタを入力してください(例:01, 02, 11)")
If StrPtr(filename3) = 0 then
Exit Sub 'キャンセルボタンがクリックされたときの処理
Else
'OKボタンがクリックされたときの処理
End If
「VBA InputBox キャンセル」で探すとサンプルがすぐ見つかりますよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
excelVBAについて。
Excel(エクセル)
-
【マクロ】複数の日付データをYYYY/MM/DDに読替えて、別ブックへ転記したい
Excel(エクセル)
-
エクセル初心者です 用語等まだ良く分からないので簡単に説明していただけると幸いです タブの挿入、図形
Excel(エクセル)
-
-
4
Accessレポートの、出力順の設定を確認するには
Access(アクセス)
-
5
Excelで、毎月の月曜と金曜の合計何日あるかを拾えるような関数ありますか?
Excel(エクセル)
-
6
UNIQUE関数、配列数式を使わずに品名ごとの集計を求めたい
Excel(エクセル)
-
7
エクセルで作成した書類の印刷について
Excel(エクセル)
-
8
vbe でのソースコード参照(msgbox)について
Excel(エクセル)
-
9
excelVBAについて。
Excel(エクセル)
-
10
エクセルのデータ整理の方法
Excel(エクセル)
-
11
1.5ヶ月分の費用按分 エクセル関数
Excel(エクセル)
-
12
ACCESSデバック画面
Access(アクセス)
-
13
excelVBAについて。
Excel(エクセル)
-
14
excelですが一つのマスに入ってる文字を2つのマスに変更できますか
Excel(エクセル)
-
15
Excel いい方法教えてください。
Excel(エクセル)
-
16
自動的に日付入力 応用
Excel(エクセル)
-
17
【マクロ】Withステートメント2つを簡略する為には?
Excel(エクセル)
-
18
excelVBAについて。
Excel(エクセル)
-
19
Wordの段落番号を付けた後に行うタブとリーダーの操作方法がうまくいきません
Word(ワード)
-
20
Excel上から、Accessのマクロビルダーにより作成した複数クエリをワンクリック実行
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの文字数列関数と競馬...
-
エクセルに写真が貼れない(フ...
-
エクセルシートの見出しの文字...
-
エクセルで、Scroll Lockと同じ...
-
表計算ソフトでの様式の呼称
-
エクセルでフィルターした値を...
-
エクセルのライセンスが分かり...
-
LibreOffice Clalc(またはエク...
-
Office2021のエクセルで米国株...
-
エクセルの複雑なシフト表から...
-
【画像あり】【関数】指定した...
-
【マクロ】実行時エラー '424':...
-
エクセルのリストについて
-
【画像あり】オートフィルター...
-
エクセルのVBAで集計をしたい
-
【マクロ】【画像あり】❶ブック...
-
エクセルの関数について
-
【関数】=EXACT(a1,b1) a1とb1...
-
【関数】3つのセルの中で最新...
-
空白のはずがSUBTOTAL関数でカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
Office2021のエクセルで米国株...
-
【画像あり】オートフィルター...
-
vba テキストボックスとリフト...
-
他のシートの検索
-
【マクロ】【相談】Excelブック...
-
【マクロ】【配列】3つのシー...
-
【マクロ】元データと同じお客...
-
【マクロ】数式を入力したい。...
-
【マクロ】左のブックと右のブ...
-
エクセルの関数について
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】excelファイルを開く...
-
【関数】3つのセルの中で最新...
-
エクセルの複雑なシフト表から...
-
【マクロ】【画像あり】❶ブック...
-
LibreOffice Clalc(またはエク...
おすすめ情報