Access2003 フォームでの入力制限

このQ&Aのポイント
  • Access2003のフォームで、数量の入力に制限を設ける方法について教えてください。
  • VBAを使用して数量の値が0以上100未満でない場合にエラーを表示するようにしていますが、マスターテーブルを参照して制限する方法はありますか?
  • マスターテーブルに「数量」と「金額」の上下限が設定されており、フォームのテキストボックスに入力された値が制限を超えている場合にエラーを表示させたいです。そのためにはADOを使用する必要がありますか?
回答を見る
  • ベストアンサー

Access2003 フォームでの入力制限

AccessでVBAを使用している途中わからないところが でてきましたのでお教え頂ければと思います。 WindowsXPでAccess2003を使用しております。 さっそくですが、まずデータ入力用のフォームがあります。 数量を入力するテキストボックスがあり、そこに入力された値が 0以上100未満ではない場合エラーを表示するようなVBAを使用しています。 このエラーチェックをVBAで直接値を指定するのではなく テーブルにあるマスターを参照して判断することは可能でしょうか。 少々わかりにくいですかね…; 項目 下限 上限 ------------------- 数量   0    100 金額  500  5000 上記マスタがあります。 フォームにて数量のテキストボックスに値を入力し、とあるボタンを クリックした際にこのマスタを見に行き、0未満あるいは100以上の 場合はエラーを表示させたいのです。 こういう場合はADO?という記述を使用しなければならないのでしょうか… よろしければお教えください。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

色々方法はあると思います。 以下に何個か(テーブルを見るので、フォームの変更は不要です) 1)フォームのデザイン画面で、入力規則/エラーメッセージを設定しておく 2)フォームを起動した時に、入力規則/エラーメッセージを設定する。 共通して、以下を前提とします。 テーブル名を「TA」と仮定します。 フォーム上の数量入力用のテキストボックスの名前を「txt数量」と仮定します。 フォーム上の金額入力用のテキストボックスの名前を「txt金額」と仮定します。 1) 以下の式を「txt数量」の入力規則に設定します。 DLookUp("項目","TA","項目='数量' AND 下限 <= " & [txt数量] & " AND 上限 > " & [txt数量]) Is Not Null エラーメッセージに、 範囲内で入力してください なお、上記 DLookup 部分を、「txt数量」の更新前処理で判別してもよいと思います。 「txt金額」への設定は、上記「数量」部分を「金額」に変更して同様に行います。 2) フォームの「読み込み時」に以下のVBAを記述します。 Private Sub Form_Load()   Dim rs As New ADODB.Recordset   Dim ctl As Control   rs.Open "TA", CodeProject.Connection, adOpenForwardOnly, adLockReadOnly   While (Not rs.EOF)     Select Case rs("項目")       Case "数量": Set ctl = Me.txt数量       Case "金額": Set ctl = Me.txt金額       Case Else: Set ctl = Nothing     End Select     If (Not ctl Is Nothing) Then       ctl.ValidationRule = ">= " & rs("下限") & " AND < " & rs("上限")       ctl.ValidationText = rs("下限") & " から " & rs("上限") & " 未満の範囲で入力してください"     End If     rs.MoveNext   Wend   rs.Close   Set ctl = Nothing End Sub 上記は ADO での例になっていますが、 DAO でも (処理的にはほとんど変更はないと思います) また、範囲外のエラーの表示は、2)の方が数値も一緒に表示しています。 参考にする等、自己責任にてお願いします。

macaron0321
質問者

お礼

ご回答ありがとうございます。 お教え頂いた内容を参考にしつつわからないところは また地道に調べていきたいと思います! ありがとうございました。

その他の回答 (3)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

#3です 記述間違いがありました。 >  rs.Open "TA", CodeProject.Connection, adOpenForwardOnly, adLockReadOnly ↓   rs.Open "TA", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly CodeProject と CurrentProject は同じところを参照する(?)みたいですが、 一般的には、CurrentProject だと思います。 CurrentProject で覚えてください。 私のコーディングミスです。 すみませんでした。

macaron0321
質問者

お礼

お礼が遅くなりましてすみません。 ご丁寧にありがとうございます! 参考にさせて頂きます。

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

テーブルに在る上限と下限でチェックし、人間がテーブルを見て、(プログラム等で)セットするのでなければ、そのテーブルのレコードを読まないとならないのは、当たり前です。何を悩んでいるのか。 こんなところに質問しなくても ADOでテーブルを読むコードなどは、Googleででも「ADOテーブル 読み込み」で照会すれば沢山例示のコードが出てくる。 参考までに db2の「生徒」テーブルの最初の2レコードを読み名前を取得例。 Private Sub test01() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset '接続 cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\Documents and Settings\XXXX\My Documents\db2.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open "生徒", cn MsgBox rs.Fields("氏名") rs.MoveNext MsgBox rs.Fields("氏名") rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub

macaron0321
質問者

お礼

ご回答ありがとうございます。 自分で参考書を見たりネットで検索しても いまいちよくわからなかったのでここで質問させて頂きました。 検索する際「ADOテーブル 読み込み」で検索すれば良かったのですね。 ずっと「フォーム 入力制限」等で検索していました。 お教え頂きありがとうございました。

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

テーブルのデザインビューの各フィールドの 入力規則に、 数量 入力規則  >=0 And <=500 エラーメッセージ "書き直し" 金額 入力規則  >=500 And <=5000 エラーメッセージ "書き直し" のように。

macaron0321
質問者

お礼

ご回答ありがとうございます。 私の説明不足ですみません。 上限および下限は年に1回ほど変更があり、 その際誰でも簡単に変更ができるようにしたいのです。 ですので、各フィールドの入力規則やVBAに書いてしまうと Accessが多少なりともわかる方でないと変更ができないのです。 なのでテーブルの値を参照するような仕組みにしたいのですが… 何かいい案はありますでしょうか。

関連するQ&A

  • Accessのフォームで…

    Access 2010のフォームのリストボックスで、あるテーブルのフィールドの値を選択した場合に、同じテーブルの同じレコードにある違うフィールドの値を、テキストボックスに読み込みたいのですが、どうすれば出来ますでしょうか? VBAのサンプルソース等でも構いません。回答お願いしますm(_ _)m

  • ACCESS2000の帳票フォームでテキストボックスの入力値を取得したい

    こんにちは。ACCESS2000でツールを作成しています。 テーブルはExcelにリンクさせ、クエリを介して帳票フォームで データを表示しています。 帳票フォームのレコード毎にテキストボックスを追加して それぞれ入力できるようにし、その値をVBAで取得したいのですが どうすればよいでしょうか。 テキストボックスを追加して実行すると、一つのテキストボックスに 入力した値が全てのレコードに反映されているようです。 帳票フォームのしくみがよく分かりません。 どなたか教えていただけないでしょうか。 宜しくお願いします。

  • Access フォームからの検索について

    初歩的な質問で申し訳ありませんが教えて下さい。 Access2000を使っています。 フォームに作ったテキストボックスに、入力した値又は文字と、特定のフィールドと比較し一致した場合にそのレコードをフォームに表示する方法はないでしょうか? いろいろと、web上のQ&Aなども見ましたが、思った動作をしませでした。 考えているのは、   ・テキストボックスにある値を入力し、『Enter』を押すとテキストボックスに入力した値と特定のフィールドと一致したレコードをフォームに表示 ・一致しない場合はメッセージボックスで一致しない旨を表示 です。 ・完全一致のみ表示 VBAでの動作を考えていますが、合わせて他の方法があれば教示頂ければと思います。 以上、お手数をお掛け致しますがよろしくお願い致します。

  • Access97でフォームの数字入力時マイナス値を認めない方法

    Access97で、フォームのレコードソースに Access内テーブルを割り当てています。 フォームのテキストボックスのコントロールソースには そのテーブルの数値項目の値を割り当てているのですが、 このテキストボックスにマイナス数値の入力を 認めない場合、更新後イベントにエラーチェックの コードを記述する以外に、簡単にエラーチェック出来る ような方法はないでしょうか。 よろしくお願い致します。

  • Access2007 textboxに入力できない。

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

  • Access2000の入力桁制限

    Access2000を使用しています。 フォームにテキストボックスを作成しています。 テキストボックスに入力桁数を 制限をかけたいと思っています。 テキストボックスは非連結をしています。 どのように設定すればよいのでしょうか?

  • アクセスVBA テキストボックス入力値からの参照

    マイクロソフトアクセス初心者です。 現在、アクセスでデータベースを作成しています。 2つのフォーム(フォーム(1)、フォーム(2))、2つのテーブル(入力情報、マスタ)、2つのテーブルをもとにした1つのレポートを作成しています。 『フォーム(1)』のテキストボックスAに入力された値を、Dlookup関数で『フォーム(2)』のテキストボックスBに数値を参照しています。 『フォーム(2)』のテキストボックスに表示された値を、『フォーム(2)』に設置されたコマンドボタンをクリックすると、VBAで『テーブル入力情報』のフィールドAに入力されるようにしています。フィールドAについてのマスタとなるテーブルが『テーブルマスタ』です。 リレーションシップを設定せず、ただ単に値を入力することは出来るのですが、レポートを作成するにあたって、『テーブル入力情報』と『テーブルマスタ』のフィールドAに1(テーブルマスタ)対多(テーブル入力情報)のリレーションシップを設定したいと思っています。 リレーションシップを設定し、テキストボックスBに表示された数値を『テーブル入力情報』に入力する際、『テーブルマスタ』から該当するデータを選択して『テーブル入力情報』に入力されるようにしたいと思うのですが、現状では、リレーションシップを設定すると、入力値が真っ白になってしまい、レポートにも入力したデータが反映されません。 ちなみに、入力する際はフィールドA=Me.テキストボックスBのようにしています。 何か良い解決策がありましたら、是非教えていただけませんでしょうか? 分かり難い文章かと思いますが、どうぞ宜しくお願い申し上げます。

  • Accessのフォームでデータを入力すると、テーブルと一致するデータをあるフィールドに代入してしまうことは可能ですか?

    本来のAccessの使い方ではないかもしれませんが・・・。 あるフォームで品番を入力すると、品番マスターなるテーブルから値を 検索して一致したフィールド(品名・数量)の値を直接フォームの フィールドに代入してしまうことは可能ですか? マクロの値の代入というものを使ってもうまくいきません。 また、クエリーを使えば、品番を入力すれば品名・数量が出るように することはできるのですが表示上だけですので、フォームに直接値 が入力されるようにしたいのです。 方法がうまく思いつきません。どうかお知恵をお貸しください!!

  • (ACCESS)入力フォームについて

    こんにちはmynannです またまた困っているのでよかったらヒントを いただきたいと思い質問させていただきます まずテーブルが二つあり 商品マスタには管理番号(主キー)と価格の二つの項目があります。 もうひとつは販売マスタというのがあり フィールドは管理番号、販売可(チェックボックス) の二つです。 この二つはリレーションシップの関係にあります そしてこの二つを一つにした 販売可商品マスタクエリがあります 商品マスタにはすでに多くのデータがあり それ専用の入力フォームもあります 今販売マスタの入力フォームを作りたいのです どのようなものかといいますと 管理番号を入力すると価格用のテキストボックスに 自動的に入力された管理番号の価格(商品マスタから調べると思うのですが)を表示するようにしたいのです 管理番号[       ]←ここに値を入力 価格[       ]←管理番号が入力されると自動的にでる 販売可 □ ←自分でチェックする イメージはこのような感じです 更新後処理を使うということはなんとなくわかるのですが どのような処理をさせていいかわかりません 助けてください!お願いします!

  • Access2000フォーム上でフィールドの入力制限をかけたい

    Access2000を使用しています。 フォーム上で、とあるチェックボックスにチェックを入れた場合に、ほかのいくつかのフィールドにデータが入力できないように制限をかけたいのですが、どのように設定すればよいでしょうか?

専門家に質問してみよう