- ベストアンサー
入力エラー時にメッセージを出す方法
- 入力ミス時にフォームを開かないようにするための方法を教えてください。
- 5602か5662以外の場合、エラーメッセージを表示して正しい入力を促す方法を知りたいです。
- VBAのコードを使用して、入力エラー時にメッセージを表示する方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >メッセージを出して、正しく入力を求めるようにしたいのですが、どのようにしたらいいでしょうか。 ただし、UserForm を立ち上げてから入力間違いに気がついた場合は除きます。 また、実際は、もう少し、選択値とOptionButton が数多くあると、こういうスタイルではうまくいかないはずです。番号を配列変数に入れて、ワークシート関数の Match 関数で探させて、その戻り値を、OptionButton の番号に当てるようにするとか、考えられるはすです。戻り値が得られない(=0 または、Err)の場合は、「入力値が違います」、とします。 Sub 推進区() Dim s As String Do s = Application.InputBox("納入便を選択して下さい。" & Chr(13) _ & "推進区:5602" & Chr(13) & "推進区:5662", "納入便選", Type:=2) If VarType(s) = vbBoolean Then Exit Sub If s = "5602" Or s = "5662" Then With UserForm1 .TextBox1.Value = s .OptionButton3 = (s = "5662") .Show Exit Do End With Else MsgBox "入力値が違います", 32 End If Loop End Sub
その他の回答 (4)
- Zero_0
- ベストアンサー率35% (72/201)
シートのどこかに、コードの一覧があるのならばそのセルを読み取って、比較する配列を作ってはいかがですか。 dim code(100) as integer sheets("コードのあるシート").select i=2 j=1 while cells(i,2)<>"" code(j)=cells(i,2) j=j+1 wend くらいの命令で、配列に取り込んで。 その後、for~nextくらいで一致するものがなければ、メッセージを出して、入力に戻るとか。
- zap35
- ベストアンサー率44% (1383/3079)
エラー時は再入力を促すのであれば、Do~Loop文を使うのがよいでしょう。なおInputBoxでCancelが押された場合の処理を追加しておきました。 Sub Macro1() Dim s Do s = Application.InputBox("納入便を選択して下さい。" & _ Chr(13) & "推進区:5602" & Chr(13) & "推進区:5662") If TypeName(s) = "Boolean" Then MsgBox "Cancelされました" Exit Sub Else Select Case s Case Is = "5602" UserForm1.OptionButton3.Visible = False UserForm1.TextBox1.Value = s Exit Do Case Is = "5662" UserForm1.OptionButton3.Visible = True UserForm1.TextBox1.Value = s Exit Do Case Else MsgBox "入力した値が適切でありません" End Select End If Loop UserForm1.Show End Sub でも選択肢が2つしかないなら、FormのなかにCheckboxを2つ配置して、選択させる方が親切なユーザインターフェイス設計かもしれませんね。
お礼
丁寧な回答有難うございました。解決致しました。
- imogasi
- ベストアンサー率27% (4737/17069)
Select Case s Case 5602 (処理) Case 5662 (処理) Case Else (以外の場合の処理) End Select が普通では。 http://www.geocities.jp/cbc_vbnet/kisuhen/bunki.html アクセスの例だが、VB,VBAで同じ。
- Zero_0
- ベストアンサー率35% (72/201)
Elseif ・・・を使う方法もありますが 条件が 5602または5662だけなら 4行目に if s<>"5602" and s<>"5662" then exit sub を入れてやれば解決します。
お礼
親切に回答頂き、有難うございました。解決致しました。