• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザーフォーム データ消去の時の処理)

ユーザーフォームの入力チェック方法について

このQ&Aのポイント
  • ユーザーフォームのテキストボックスの入力チェック方法について詳しく説明します。
  • データを消去する際に表示されるエラーメッセージを回避する方法をご教示します。
  • Excel2002の環境でのユーザーフォームのテキストボックスの入力チェックの注意点について解説します。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

>UserForm1に設けたコマンドボタンを押した時に以下のチェックを行いたい ということであれば、以下ではどうですか? Private Sub CommandButton1_Click()   Dim i As Long   For i = 5 To 8     If Len(Me("TextBox" & i).Text) = 0 Then '未入力Check       MsgBox "TextBox" & i & "に入力してください", _           vbExclamation, "納品書作成ツール"           Me("TextBox" & i).SetFocus       Exit Sub     End If     If IsNumeric(Me("TextBox" & i).Text) = False Then '数値入力Check       MsgBox "TextBox" & i & "に数値で入力してください", _           vbExclamation, "納品書作成ツール"           Me("TextBox" & i).SetFocus       Exit Sub     End If   Next i End Sub

sadacchi12
質問者

お礼

ありがとうございました。 無事作業完了しました。

その他の回答 (4)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

>個数分ループ処理をすることはできないでしょうか? private sub CommandButton1_Click()  dim res as string  dim i as integer  for i = 5 to 8   if me.controls("TextBox" & i) = "" then    res = "入力してください"    exit for   elseif not isnumeric(me.controls("TextBox" & i)) then    res = "数値を入力してください"    exit for   end if  next i  if res <> "" then   me.controls("Textbox" & i).setfocus   msgbox res, vbexclamation, "納品書作成ツール"  end if end sub #はて? 同じ結果と言いながら回答したロジックに切り替わってますが、どういう事でしょうか。

sadacchi12
質問者

お礼

ロジックの間違いはkeithinさんのご指摘の通りです。 ただ、いただいたロジックを Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) で実行すると同じ結果になってしまったということです。 再三にわたって回答いただきありがとうございました

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.3

追伸 テーブルデザインビューでフィールドに 値要求、入力規則、ルックアップ設定で 命令文がなくてもチェック可能です またフォームのデザインビューでヒントテキストにコメントを入力しておくと ツールにマウスポインターを近づける機能を表示するように ヒントテキストの内容を表示します

sadacchi12
質問者

お礼

間違えて投稿されたのではないですか?

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.2

失礼があったらゴメン VBAのしきたりをご存じないようですので 1、ひとくくりの命令文は  Private Sub で始まり End Sub で終わります。 2、条件式は If関数と混同されていますね IF 条件式 Then 真のときの命令文(複数行または : 区切で複数の命令文可) Else 偽のときの命令文(複数行または : 区切で複数の命令文可) End If これに従うとあなたの命令文は次のようになります。 Rem**************** Rem TextBox5 Check Rem**************** Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox5.Text) = 0 Then '未入力Check If IsNumeric(Me.TextBox5.Text) = False Then '数値入力Check MsgBox "数値で入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If Else MsgBox "入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If Me.TextBox5.Text = Format(Me.TextBox5.Text, "#,##0") End Sub '--------------以下不要-------------------- Exit Sub End If MsgBox "入力してください", _ vbExclamation, "納品書作成ツール" Me.TextBox5.SetFocus Exit Sub End If Me.TextBox5.Text = Format(Me.TextBox5.Text, "#,##0") End Sub --------------------------------------------------------- 尚 複数の条件書式(N択)は Select Case 文が分かり易いです

sadacchi12
質問者

お礼

ご指摘の通りです。 エラー回避でパニックてまして。すみません。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

そもそもロジックが間違ってます。 Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox5.Text) = 0 Then '未入力Check  MsgBox "入力してください", _  vbExclamation, "納品書作成ツール" ’Me.TextBox5.SetFocus           ’オマケ  cancel = true  Exit Sub End If If IsNumeric(Me.TextBox5.Text) = False Then '数値入力Check  MsgBox "数値で入力してください", _  vbExclamation, "納品書作成ツール" ’Me.TextBox5.SetFocus  cancel = true  Exit Sub End If Me.TextBox5.Text = Format(Me.TextBox5.Text, "#,##0") End Sub

sadacchi12
質問者

補足

早速の回答ありがとうございました。 私の説明が悪かったのか、いただいたロジックでは同じ結果でした。 そもそも、Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) でチェックをする方法がおかしいのでは感じています。 質問内容を変えさせてもらいます UserForm1にテキストボックスが4個あります(TextBox5,TextBox6,TextBox7,TextBox8) Private Sub TextBox●_BeforeUpdateを使わず テキストボックス4個に入力が完了したと仮定して UserForm1に設けたコマンドボタンを押した時に以下のチェックを行いたい '************************************************************ If Len(UserForm1.TextBox5.Text) = 0 Then '未入力Check  Me.TextBox5.SetFocus  flag1=1 End If If IsNumeric(UserForm1.TextBox5.Text) = False Then '数値入力Check Me.TextBox5.SetFocus flag2=1 End If If flag1<>0 then  MsgBox "入力してください", _  vbExclamation, "納品書作成ツール"  Exit Sub ElseIf flag2<>0 then  MsgBox "数値で入力してください", _  vbExclamation, "納品書作成ツール"  Exit Sub end if '************************************************************ このプロシージャをTextBox5,TextBox6,TextBox7,TextBox8の4個を記述せずに 個数分ループ処理をすることはできないでしょうか?

関連するQ&A