• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入力エラー時にメッセージを出す方法)

入力エラー時にメッセージを出す方法

このQ&Aのポイント
  • 入力ミス時にフォームを開かないようにするための方法を教えてください。
  • 5602か5662以外の場合、エラーメッセージを表示して正しい入力を促す方法を知りたいです。
  • VBAのコードを使用して、入力エラー時にメッセージを表示する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >メッセージを出して、正しく入力を求めるようにしたいのですが、どのようにしたらいいでしょうか。 ただし、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

m_boy
質問者

お礼

親切に回答頂き、有難うございました。解決致しました。

その他の回答 (4)

  • Zero_0
  • ベストアンサー率35% (72/201)
回答No.5

シートのどこかに、コードの一覧があるのならばそのセルを読み取って、比較する配列を作ってはいかがですか。 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)
回答No.3

エラー時は再入力を促すのであれば、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つ配置して、選択させる方が親切なユーザインターフェイス設計かもしれませんね。

m_boy
質問者

お礼

丁寧な回答有難うございました。解決致しました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

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)
回答No.1

Elseif ・・・を使う方法もありますが 条件が 5602または5662だけなら 4行目に if s<>"5602" and s<>"5662" then exit sub を入れてやれば解決します。

関連するQ&A