• ベストアンサー
  • すぐに回答を!

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

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数758
  • ありがとう数1

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

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

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

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

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

  • Excelで検索結果をテキストボックスに表示

    Excelユーザーフォームにテキストボックス4つとコマンドドボタン1つを作成して、TextBox1に検索項目を入力しボタンを押すとA列を検索してB列、C列、D列の検索結果をTextbox2(B列)、textbox3(C列)、textbox4(D列)に表示する。 A列に同じ項目があったら、ボタンを押すと次の検索結果をTextboxに表示するマクロを教えてください。

  • 【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で表示だけされるようにしています。

  • エクセル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エディタのバグ?) どなたか回答お願いします。

  • ExcelVBA テキストボックスのControl

    いつもお世話になります。 Excelのユーザーフォームのテキストボックスの機能についてご質問させて頂きます。 TextBox40のControlSourceに「設定項目!B9」と設定しました。 その際、B9には「10:00」と入力しておりまして、テキストボックスにはシリアル値が 表示されてしまいます。 これをシリアル値ではなく「10:00」とあらわすにはどの様な手順が必要でしょうか? コードで取得するしか方法はないでしょうか? 宜しくお願い致します。

  • VBAユーザーフォームで

     エクセルVBAでユーザーフォームより、テキストボックスで入力させたものをセルに表示させようとしています。  テキストボックスは1と2があり、テキストボックス1で入力した値の最初の5文字+固定値をテキストボックス2に自動で入力(表示)したいのですがなかなかうまくいきません。(自動入力後、手動で一部修正します。)  VBAをはじめたばかりの初心者ですが、どうぞよろしくお願いします。

  • ExcelVBAでの日付入力について

    UserFormにTextBoxがTextBox1からTextBox10の10個あり、すべて日付を入力します。 たとえば「12/10」と入力し、EnterもしくはTabキーなどで他のTextBoxにカーソルを移動させると 「2008/12/15」と前に年を表示させたいと思っています。 もし、日付ではないものを入力された場合は、エラーメッセージを表示したいと思っています。 日付入力はTextBox1から順に入力していくのですが、いつも10個すべてのTextBoxが入力される わけではありません。(TextBox1~TextBox3のみ入力などがあります。) どのようにしたら日付データ「12/10」と入力したら自動的に「2008/12/10」と年を追加させる ことができ、日付データではない場合はエラー表示することができるのでしょうか。 (「2008/12/10」と入力された場合は、そのまま表示) ご教授のほど、よろしくお願いします。

  • 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

  • VBAでフォームからシートへ入力

    シートが「回答フォーム」と「用語」と言うのがあります。 (1)「回答フォーム」シートに"入力"ボンタをクリックすると「用語」のシートに入力される。 (2)回答フォーム」シートに"検索"ボンタをクリックすると「用語」のシートからフォームへ表示される。 用語のシートに項目は、A列から、ナンバー、検索、フリガナ、用途、用語、意味とあります。 TextBox1に用語、TextBox2に用途、TextBox3に意味 とあります。 (1)には Private Sub 入力_Click()   Sheets("用語").ActiveSheet・・・ここがエラーになります。 「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm1.TextBox1.Value Cells(行, 列 + 1) =UserForm1.TextBox2.Value   Cells(行, 列 + 2)=UerForm1.TextBox3.Value UserForm1.TextBox1.SetFocus Cells(行 + 1, 列).Select End Sub (2)には Private Sub CommandButton1_Click() Set sh1 = bk.Worksheets("回答フォーム") Set sh5 = bk.Worksheets("用語") cnt1 = 2 UserForm1.TextBox1.Value・・・・ここのVALUEがエラーになります。 「コンパイルエラー プロパティの使い方が不正です。」 ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],用語!C[-5],0)" n = ActiveCell.Value '用語 sh5.Cells(n, 2).Value = sh1.TextBox1.Value '意味 sh5.Cells(n, 3).Value = sh1.TextBox3.Value '用途 sh5.Cells(n, 4).Value = sh1.TextBox2.Value End Sub 申し訳ないですがよろしくお願い致します。