
<質問>Loopなどを強制終了させてユーザーフォームを閉じるコードはないでしょうか?
<背景>
ユーザーフォーム内にあるテキストボックスに数字が入力されない場合、入力されるまでユーザーフォームを表示するというマクロを作りました。
Do While TextBox2.Value = ""
Unload UserForm1
MsgBox "数字を入力してください"
UserForm1.Show
Loop
しかし、これではテキストボックスに何も入力していない状態だとloopが実行され、マクロを閉じることができません。
何かしらテキストボックスに入力して終了させる方法以外になにか改善方法はあるでしょうか?
因みに、「終了」のコマンドボタンには
Private Sub CommandButton2_Click()
Unload UserForm1
End Sub
のマクロを組んであります。
分かる方がいましたら、教えていただきたいです。
No.8ベストアンサー
- 回答日時:
#5です
>回答いただいたIfですと、TextBoxが空欄の場合、そのままコードはすすんでしまうので、エラーとなり、マクロが止まってしまいます。
Exit Subではだめなの?
Private Sub CommandButton1_Click()
If TextBox2.Value = "" Then MsgBox "数字を入力してください"
TextBox2.SetFocus
Exit Sub
'計算処理
End Sub
よく使うのは、複数の入力チェックを行って不備がある場合、
内容を案内して処理をやめるかたちかと。。
実行の際に入力チェックをしたいと言う事ではないのかな?
他の方法として
#7さんが回答しているように入力制限を設定したり
もしくは、下記のような感じで入力時、入力チェックをすることも
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2.Value = "" Or IsNumeric(TextBox2.Value) = False Then
MsgBox "数字を入力してください"
TextBox2.Value = ""
End If
End Sub
ExitSubを使用することで希望通りの操作になりました!ありがとうございます。
追記も確認しましたが、入力制限の方はなぜかうまくいきませんでした。
それに伴い、新しく問題が発生してしまったので、また質問した際はよろしくお願いいたします。
No.9
- 回答日時:
度々、、申し訳ないです。
コピー書き足し確認せず、、すみません。
If TextBox2.Value = "" Then
MsgBox "数字を入力してください"
TextBox2.SetFocus
Exit Sub
End If
です。
No.7
- 回答日時:
このような仕様の場合、
Private Sub TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
や
Private Sub TextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger,ByVal Shift As Integer)
を使用して「入力されるまで表示」より、「(数字等適切な値が)入力されれば終了」とするのが良いと思います。
回答ありがとうございます。
KeyPress、KeyDownを知らなかったので検索したのですが、全く理解ができませんでした、、、(コードの書き方も何一つ理解できませんでした。)
Private Sub TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyCode=TextBox2.Value = "" Then
MsgBox "数字を入力してください"
End If
End Sub
などでいいのでしょうか、、、?
No.5
- 回答日時:
こんにちは
>何かしらテキストボックスに入力して終了させる方法以外になにか改善方法はあるでしょうか?
Loopさせる意味合いが良くわからないのですが、
Unloadして.Show、、他の内容も消えてしまう気がしますが、、
単純にIFではだめなのでしょうか?
疑問が残りますが、こんな感じにしては、仕様に合いませんか?
Sub start()
UserForm1.Show vbModeless
End Sub
Private Sub CommandButton1_Click()
If TextBox2.Value = "" Then MsgBox "数字を入力してください"
End Sub
Private Sub CommandButton2_Click()
Unload UserForm1
End Sub
ちなみにvbModelessなので、RefEditを使用している場合、
RefEditダメ(バグ)だったと記憶しています。
Loopを使用する場合であれば、ループする条件を増やし、
TextBox2.Value = "" or ・・・
・・・部分を考えてみてはいかがでしょう。。
回答ありがとうございます。
このコードのすぐ後にTextBoxの値が必要なコードが組んであるので、loopして数字をその場で入力させる必要があるのです。
回答いただいたIfですと、TextBoxが空欄の場合、そのままコードはすすんでしまうので、エラーとなり、マクロが止まってしまいます。
No.4
- 回答日時:
Dim stopflag As Boolean
最初(subの外側)に書く必要があります。
中に書いてはいけません。
subのなか、ループに入る前に
stopflag = false
として、あとは、ループの中に
doevents
if stopflag then exit do
を加え、
Private Sub CommandButton3_Click()
stopflag = True
End Sub
とすればよいです。
(ただ、フォームを閉じたいなら、loopの中にDoEvents加えるだけでも、commandbutton2押したら、抜けられそうな気もしますが。)
何度もすみません。
外側(ユーザーフォームのコードの一番上)に配置していますが、やはりループしてしまいます。
loopの中にdoeventsを加えるというのは、
Do While TextBox2.Value = ""
Unload UserForm1
MsgBox "1パターンのデータ数を入力してください"
UserForm1.Show
DoEvents
If stopflag Then Exit Do
Loop
ということでしょうか?(これでもやはりループしてしまいます。)
No.2
- 回答日時:
Dim stopflag As Boolean
private sub hoge
stopflag = false
do
doevents
if stopflag then exit do
loop
end sub
Private Sub Command1_Click()
stopflag = True
End Sub
などとすればコマンドボタン1を押すことによって、ループから抜けることができます。
doeventsを入れるのがみそですが、いろいろありますので、興味あったらじっくり調べてみてください。
回答ありがとうございます。
コードとコマンドボタン3を追加したのですが、コマンドボタン3を押した後に「終了」ボタンを押すとやはりループされてしまいます、、、
No.1
- 回答日時:
こうしてみたけどダメだった。
Private Sub CommandButton2_QueryClose(Cancel As Integer, CloseMode As Integer)
Debug.Print "CommandButton2_QueryClose"
If MsgBox("フォームを閉じますか?", _
vbOKCancel + vbQuestion) = vbCancel Then Cancel = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
- Excel(エクセル) vba フォーム軽量化 1 2022/09/07 18:59
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
Geminiって、Geminiの入力フォ...
-
数字以外の入力をエラーにする...
-
HTMLで全角文字のみ入力するに...
-
EXCEL VBA で指定した範囲に入...
-
初歩的な事だと思います。 Sub...
-
テキストボックスの番号を使っ...
-
Excel-VBAでInputBox+Pulldown...
-
DataGridViewの桁数制限に関して
-
VBAのユーザーフォーム上で名簿...
-
ExcelVBAのユーザーフォームで...
-
excel vba でユーザーフォーム...
-
インプットボックスでの日付入力
-
VBA R1C1形式で変数の入力について
-
クッキーが別PCで共有されてしまう
-
TextBoxから数字が文字...
-
<input>のstep属性に違反する入...
-
エディットボックスの入力制限...
-
DataGridView 列ごとの入力制限
-
c#でTextBoxの入力制限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
初歩的な事だと思います。 Sub...
-
テキストボックスの番号を使っ...
-
EXCEL VBA で指定した範囲に入...
-
VBAでInputBoxの再入力をさせる...
-
Excel-VBAでInputBox+Pulldown...
-
入力フォームの値をQRコードで...
-
TextBoxから数字が文字...
-
数字以外の入力をエラーにする...
-
エディットボックスの入力制限...
-
DataGridViewの桁数制限に関して
-
HTMLで全角文字のみ入力するに...
-
「イ分」・・・フンという文字...
-
excel vba でユーザーフォーム...
-
DataGridView 列ごとの入力制限
-
アクセスのマクロ
-
至急です!Excelがわかりません
-
VBA R1C1形式で変数の入力について
-
教えて!全角文字「μ」の半角
-
アルファベットGの小文字の入力
おすすめ情報