
以下のコードにて、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
excelVBAについて。
Excel(エクセル)
-
5
excelVBAについて。
Excel(エクセル)
-
6
エクセルの関数ついて
Excel(エクセル)
-
7
UNIQUE関数、配列数式を使わずに品名ごとの集計を求めたい
Excel(エクセル)
-
8
【再投稿】レイアウトが異なる別のワークブックからデータを転記する方法を教えてください
Excel(エクセル)
-
9
excelVBAについて。
Excel(エクセル)
-
10
excelVBAについて。
Excel(エクセル)
-
11
excelですが一つのマスに入ってる文字を2つのマスに変更できますか
Excel(エクセル)
-
12
エクセルで作成した書類の印刷について
Excel(エクセル)
-
13
年間の医療費のデータがあり、月々の集計をする計算式を教えていただけませんか
Excel(エクセル)
-
14
45490がどうして
Excel(エクセル)
-
15
条件付き書式の効率的な設定の仕方について
Excel(エクセル)
-
16
【Excel】 1つのセルの日にちを4分割にしたい
Excel(エクセル)
-
17
フィルター時の、別の列に書いてある数字の表に現れた個別の数字の数量のみを表す式を教えてください。
Excel(エクセル)
-
18
(マクロ)値を返す時は subでもfunctionでもどちらでも良いのでしょうか?
Excel(エクセル)
-
19
1.5ヶ月分の費用按分 エクセル関数
Excel(エクセル)
-
20
エクセル初心者です 用語とか良く分からないので簡単に説明していただけると幸いです 表を作っているので
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
エクセル
-
エクセルの循環参照、?
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】WEBシステムから保存...
-
【マクロ】A列にある、日付(本...
-
【マクロ】アクティブセルの時...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】別のブックから、フ...
-
iPhoneのExcelアプリで、別のシ...
-
【マクロ】3行に上から下に並...
-
【エクセル】期限アラートについて
-
【関数】同じ関数なのに、エラ...
-
VBA チェックボックスをオーバ...
-
Excelの新しい空白のブックを開...
-
Excelファイルを開くと私だけVA...
-
マクロ・VBAで、当該ファイルの...
-
Excelについての質問です 並べ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelファイルを開くと私だけVA...
-
エクセルについてどう関数を使...
-
マクロ・VBAで、当該ファイルの...
-
エクセルのセルに画像は埋め込...
-
エクセルで、一部のセルだけ固...
-
【マクロ、画像あり】A表かB表...
-
エクセルでカウントする
-
【マクロ】コードを少しでも、...
-
VBA_日時のソート
-
エクセルで教えてください。 例...
-
エクセル 月間シフト表で曜日ご...
-
セルの左に余白を付ける
-
エクセル
-
エクセルについて教えてください
-
2枚のエクセル表で数字をマッチ...
-
ExcelのIF関数との組み合わせの...
-
エクセルのファイルのコピーを...
-
エクセルで二つのブックの違い...
-
空白処理を空白に
-
Excelのチェックボックスについ...
おすすめ情報