VBA(Excel)でフォームのテキストボックス入力チェックの対処方法とは?

このQ&Aのポイント
  • ExcelでVBAを使用して、フォームのテキストボックスへの入力チェックについて困っています。
  • ユーザーフォーム上にテキストボックスを作成し、ユーザーが入力した内容を元にExcelシートを検索して結果を取得する処理を行っています。
  • しかし、誤ったキーが入力された場合にメッセージを表示して次の入力項目に進まないようにしたいのですが、うまく実装できません。
回答を見る
  • ベストアンサー

VBA(Excel)でフォームのTextboxへの入力チェックの対処について

Excel97の社内向けアプリケーションとしてExcelでVBAを書いているのですが、わからないことがあるのです、どなたか御教授いただきたくお願いします。 ユーザーフォームの上でテキストボックスを入力項目として用意し、そこにユーザーが入力した内容をキー(例えば商品コード)にしてExcelシートを検索し結果(該当する商品名)を別のテキストボックスなどに返す、ということをやっています。 で、キーの入力が終わったのをAfterUpdateで受けて検索するのですが、誤ったキーが入力された場合にメッセージを表示して次の入力項目に進まないようにしたいのです。 ところが、メッセージを表示することはできているのですがメッセージボックスのOKボタンを押すと次の入力項目に進んでしまうのです。TextBox3.SetFocusなどとしてみたのですがなぜか言うことを聞きません。 どなたか、お教え下さい。 # 仕様なんでしょうか??

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

TextBox3.SetFocus の代わりに SendKeys "+{TAB}" ではどうでしょうか。

hestia
質問者

お礼

おおおっ!!! これです、これ! 早速のお返事でありがとうございます!!! 助かりました~

関連するQ&A

  • EXCEL2000 VBAにおいてユーザフォーム上での入力チェック

    ユーザフォーム上のテキストボックスに数字のみ入力するように制御したいのですが、英字が入力された場合、エラーメッセージを出した後、フォーカスをそのテキストボックスに戻したいのですが、うまくいかず、次のところにフォーカス移動してしまいます。どのようにすればいいか、ご教示願います。

  • ユーザーフォームのTextBoxの操作について

    皆様、こんにちは。 いつもお世話になっております。 ユーザーフォームのテキストボックスに何も入力されていないと自動的に0が表示されるようにしたいですが、エラーが出てしまいます。 具体的に、 1テキストボックス 2テキストボックス ・・・ 合計テキストボックス があって、詳細が分からなくて合計のテキストボックスにのみ入力する時に、合計テキストボックスをクリックしたときにその他のボックスに0が表示されるように書きたいです。 Private Sub TextBox9_Enter() Dim i As Integer For i = 1 To 8 If TextBox(i).Text = "" Then TextBox(i).Text = "0" End If Next i End Sub のように考えましたが、間違っていますね。 教えていただければ幸いです。 どうぞよろしくお願いいたします。

  • ユーザーフォームのスクロールについて(エクセル2000VBA)

    お世話になります。 上下に長いユーザーフォームを作成し、スクロールして使っています。 1~4まで項目があり、ボタンをクリックするとその項目の先頭まで自動的にスクロールするような仕組みを作りたいのですがどうしたらよいでしょうか? Private Sub CommandButton1_Click()  TextBox1.SetFocus  '項目の先頭にあるテキストボックスに移動する End Sub という風なコードはできたのですが、ボタンの位置よりテキストボックスが下にあると、フォーカスしたテキストボックスがユーザーフォームの一番下に表示されてしまいます。 また、上方向にいく時も、テキストボックスの1行上に配置してあるタイトル(ラベルで作成しました)が表示されないので少し不便な気がします。 例えば、FAQサイトによくあるような、目次をクリックするとその項目が一番上に表示され、「Top」をクリックしてページ先頭にジャンプするような感じにしたいのですが…。 よろしくお願いします。

  • 【Access】 VBA 入力漏れを防ぎたい

    Access&VBA初心者です。 商品の入出庫状況をACCESSで管理しようとしています。 ある項目の入力漏れを防ぐためにメッセージが出るようにしたいのですがどのようにしたらいいかわかりません。 【商品マスターテーブル】 商品コード 商品名 管理・・・yes/no型(yesの場合はロットと期限の管理が必要) 【入力フォーム】 商品コード 入庫数 出庫数 ロット 期限(タブストップしない) 商品マスタで「管理」がYesになっている場合で「ロット」もしくは「期限」が入力されていない場合、 次のレコードに移る前に「ロット又は期限が入力されていません」というメッセージボックスを表示し、 「ロット」と「期限」を入力するようにしたいと思っています。 現在はネットで調べて「ロット」を入力したら「期限」を入力するように Private Sub ロット_AfterUpdate()   If IsNull(Me.期限) Then     MsgBox "期限を確認してください"     Me.期限.SetFocus   End If End Sub というかんじにしてみたのですが、 「ロット」を入力し忘れてしまったり、「管理」がNoであっても「ロット」を入力することがあるので 改善をしたいと思っていますがVBAの使い方がわからないためこの先にすすめません。 何か良い方法がありましたらアドバイスをお願いします。 ※入力フォームにはテキストボックスを貼り付けて「管理」が-1もしくは0で表示だけされるようにしています。

  • エクセル2003のVBAで、ユーザーフォームにあるテキストボックスに入力制限をつけたいのですが

    エクセル2003のVBAで、ユーザーフォーム上にあるテキストボックスに入力制限をつけようとしています。 エクセルのセル13列目にdeg値 0 0.5 1 1.5 2 ・ ・ ・ があります。 ここにない値を入力するとエラーメッセージを表示させます。 下記のコードで、小数点を入力した瞬間(例えば「1.」)にエラーメッセージが表示されてしまいます。 どう修正したらよいか、どなたか分かりませんでしょうか? よろしくお願いいたします。 Private Sub TextBox21_Change() For i = 7 To 1446 If TextBox21.Value = ThisWorkbook.Sheets(\"default\").Cells(i, 13).Value Then Exit For Next i If i = 1447 Then MsgBox \"deg値と一致しません。補正値を入れなおしてください。\" TextBox21.Text = \"\" End If End Sub

  • EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります

    EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります。 (1)ユーザーフォームにテキストボックスを2つ作る (2)コマンドボタンを1つ作る。 この場合に、コマンドボタンを押すと、セットフォーカスされている方のテキストボックスに「新春」と表示させることはできるのでしょうか。 キーボードは当然セットフォーカスされているテキストボックスに入力されますが それと同じ機能をコマンドボタンにも持たせたいのです。 Private Sub CommandButton1_Click() で TextBox1がセットフォーカスされているならTextBox1に"新春"と入力する TextBox2がセットフォーカスされているならTextBox2に"新春"と入力する というような条件式になるのでしょうか。 色々調べましたが答えが見当たりません。 よろしくお願いいたします。

  • VBAでのユーザーフォーム上でのタブオーダーの移動の方法

    やりたい事を以下に書きます。  ユーザーフォームで入力用のTEXTBOXがいくつかあり、TABINDEXが最初のTEXTBOXから順に入力していきます。  1つのTEXTBOXに入力完了後した場合、TABキーまたは、ENTERにより次のTEXTBOXにフォーカスが移動し、最後にコマンドボタンにを押すと入力が完了するというフォームを作っています。  ただし、最初のTEXTBOXに『99』を入力すると、途中のTEXTBOXへのフォーカスの移動はしないで最後のコマンドボタンにフォーカスが移動するようにしたいと考えています。 問題点を以下に書きます。  TEXTBOXの入力完了を現在、「AfterUpdate」イベントでつかまえて、TEXTBOXの値を取得し、その値が『99』だった場合、コマンドボタンにフォーカスを移動するようにコーディングしています。 こんな感じです。(かなり省略していますが、) Private Sub TextBox1_AfterUpdate() If TextBox1.Value = "99" Then CommandButton1.SetFocus Exit Sub End If End Sub この用にコーディングすると、TABINDEXが二つ後ろのTEXTBOXが入力待ち状態となってしまいます。 たとえば TEXTBOXが3つコマンドボタンが1つのフォームだと、 TEXTBOX1に『99』と入力し、上記のコーディングだと一度コマンドボタンにフォーカスが移動したあと、最後にTEXTBOX3にフォーカスが移動して入力待ち状態となる感じです。 色々試しましたが、解決方法が見つかりません。知っている方いましたら、教えてください。

  • VBA ユーザーフォームでデーターの入力

    いつもお世話になります。 WIN7 EXCELL2010 です。 現在は ユーザーフォームを起動し、 日時   は自動で今日の日付 ID    入力 売上金額 入力 を順次エンターキー クリックをクリックして 「入力」ボタンをクリックすると B C K列にデーターが入力されます。 この現状からいちいち「入力」ボタンをマウスに持ち替えるのはたくさんのデーターを 入力するに面倒で、キーボード上で作業が可能ならば改善したいと思っています。 「入力」ボタンのクリックを「キーボード」のエンター変えたいのですがどうマクロを記述すればいいかご指導いただけませんか。  ※併用が可能ならば「入力」ボタンでのデーター入力もできるのならありがたいのです。 よろしくお願いします。 参考 UserForm1 Private Sub CommandButton1_Click() ' y = 2 Do While Cells(y, 2) <> "" y = y + 1 Loop Cells(y, 2) = TextBox1.Text Cells(y, 3) = TextBox2.Text Cells(y, 4) = TextBox3.Text Cells(y, 11) = TextBox4.Text TextBox1.Text = Format(Date, "mm/dd") TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.SetFocus End Sub Module1 Sub FormDisp() UserForm1.Show vbModeless End Sub

  • Access2007 textboxに入力できない。

    Access2007 textboxに入力できない。 非連結のフォーム上に、非連結のテキストボックスを張り付けたのですが、入力ができずに困っています。 カーソルは来ていて、試しにVBAで値を入れてみると表示はされるのですが、プロテクトが掛っているように、入力ができません。 テキストボックスの Enabled=true Locked=false になっています。 どのあたりを見ればよいのかもわからず、苦慮しております。 よろしくお願いいたします。

  • エクセルVBAのユーザーフォーム上のテキストボックスについての質問です

    エクセルVBAのユーザーフォーム上のテキストボックスについての質問です。 Aのユーザーフォームの内容をBのユーザーフォームのテキストボックスへ引き継いで、Bのユーザーフォーム上で内容を編集するという仕組みにしたいのです。 Bのユーザーフォームは新規入力もかねたユーザーフォームなので、テキストボックスのイベントにAfterUpdateを使用して、テキストボックスの内容が書き換えられるとデータベースから検索して新規か既存か判断させています。 AのユーザーフォームからBのユーザーフォームのテキストボックスへ引継ぎさせるときにこのAfterUpdateを発生させたくないのですが、Application.EnableEvents=Falseなどを使ってもイベントが発生してしまいます。 また、イベントがどのタイミングで発生するかと、コードをステップで実行させると、このイベントは発生しません。そのために、いきづまってしまいました。 AのユーザーフォームからBに引き継ぐ処理  ユーザーフォームB.Load ---ユーザーフォームBのイニシャライズが実行される  ユーザーフォームB.テキストボックス = ユーザーフォームA.テキストボックス  ユーザーフォームB.Show ちょっと簡単に書きすぎですがこんな感じです。 コードをステップで実行するとユーザーフォームBのAfterUpdateは実行されません。(VBAエディタのバグ?) どなたか回答お願いします。

専門家に質問してみよう