Access2000で重複不可項目の入力方法

このQ&Aのポイント
  • Access2000とWIN98SEの環境で、重複不可の項目を入力する方法について解説します。
  • 顧客コード、顧客名、住所のテーブルを作成し、それにデータを登録するフォームを作成しています。顧客コードは修正時は入力不可で、追加ボタンを押すと移動できるようになっています。
  • 追加時に顧客コードに重複したコードが入力されると、Dcount関数を用いてエラーメッセージを表示しています。また、Escキーを押すことでコードの入力をリセットすることができます。
回答を見る
  • ベストアンサー

access2000での重複不可項目の入力

access2000,WIN98SEの環境です。 顧客コード・・・テキスト型、主キー、重複不可 顧客名・・・テキスト型 住所・・・テキスト型 というテーブルを作成し、そこへ登録するフォームを作成しています。 顧客コードは修正時は入力不可としており、追加というボタンを押すとそこへ移動できるようにしています。 追加時に顧客コードで既に登録してあるコードを入れると、Dcount関数を用いて重複レコードがあった時はエラーメッセージを出しています。 その後、カーソルは顧客コードの末尾に移り(100|という感じです)、backspaceキーで100を消して再度入れ直そうとすると再び重複エラーのメッセージが出てしまいます。 Escキーを押すと、コード自体がシロ抜きになり入力することができるのはわかったのですが、Escキーを押すという行為をVBAで現すことはできるのでしょうか? よろしくお願い致します。なお、マクロは使用しておらずVBAでのコーディングで処理をしています。

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

  • ベストアンサー
  • sgh
  • ベストアンサー率61% (75/121)
回答No.3

"Undoメソッド"をヘルプで調べてみてください。 ご質問内容の[ESC]キーを押したことと同じ機能になります。 更新前(BeforeUpdate)や変更時(Change)のイベントで使ってください。 SendKeysを使っても問題ないと思いますが、SendKeysは予期せぬ動作をすることがしばしばあるので、 私はなるべく使わないようにしています。

takazou
質問者

お礼

undoで解決しました。遅くなりましたが、どうもありがとうございました。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 直接質問の答えにはなりませんが。 登録フォームをテーブルと非連結で作成してはいかがですか。 フォーム上に適当にテキストボックス(顧客コード、顧客名、住所)を置きます。 追加ボタンのクリックイベントで、 1.3つのテキストボックスが全て空("")でないことを確認(必要に応じて) 2.DCount関数で重複チェック 3.データテーブルのレコードセットを更新可で開く 4.レコードセットにデータを追加する これなら、顧客コードのテキストボックスに入力する時には、重複チェックがかからないのでエラーメッセージは出ません。 Escキーを押すというような、あまり通常しないような動作はやめた方がいいような気がします。 では。

takazou
質問者

お礼

現在、非連結型のフォームにチャレンジしています。遅くなりましたが、ありがとうございました。

  • hysteric5
  • ベストアンサー率28% (4/14)
回答No.1

SendKeysステートメントを使用してはいかがでしょう? Sendkeys "{Esc}" ッう感じで…

takazou
質問者

お礼

遅くなりましたが、ありがとうございました。

関連するQ&A

  • アクセスで重複と該当なしコードは入力不可にしたい

    アクセス97で顧客管理をしています。 まだなかなか使いこなせないでいるところがあるのですが、どなたかわかりましたらよろしくお願いします。 テーブルAに1000件以上のレコードがあります。主なフィールドはコードと顧客名と住所などの情報です。そのテーブルにレコードを追加していくのに、フォームから行っています。フォームプロパティのデータ入力を「はい」に設定してるだけです。 ここで問題が2つあります。 (1)例えばフォームからコードを入力する際に、正しいコードであれば良いのですが、間違ったコードを入力してしまってもテーブルに追加されてしまうのです。今はその都度テーブルを開いてその行を削除しています。 正しいコードかコードでないかの判断はテーブルBに存在するコードによって決定します。テーブルBになければ全てエラーにしたいのです。 (2)コードが重複してもいけないのですが、テーブルAのコードのプロパティを重複なしにしているのですが、フォームに一度重複したコードを入力してしまうと、一度開いたフォームを強制終了しなければ先に進めません。 (1)においても(2)においても、例えばメッセージボックスが開いて「正しいコードを入力して下さい」のようなものが開いて、OKをクリックしたら、またコードの入力から始まるような方法はないものでしょうか? ちなみにその顧客コードを入力したら、顧客名が自動的に開く下記VBAをフォームに組んでいます。 Private Sub 店番_AfterUpdate() Me![名前] = DLookup("顧客名", "テーブルB", "顧客コード=" & Me![コード] & " ") End Sub 何卒よろしくお願いします。

  • クエリーから入力フォームの作成

    access2000を使って簡単な注文用のフォームを作っています。VBAは初心しゃです。 テーブルとしては、納品伝票(伝票番号、顧客コード)、顧客管理(顧客コード)を作り( )ないのものでリレーション組んでます。 クエリーでリレーションを組み、それを元にフォームを作りました。 希望としては(1)伝票番号の重複がないようにする。 (2)顧客コードから住所を表示させる、顧客コードが登録されていないときにはメッセージを出し、正しい顧客コード(顧客コードのみ)を入力させる。 (1)はクエリーでテキストのデータを条件にし、フォームのVBAで Private Sub 伝票番号_AfterUpdate() If DCount("伝票番号", "Q_納品伝票") >= 1 Then MsgBox "すでに登録されています" Me.Undo DoCmd.GoToControl "顧客名" DoCmd.GoToControl "伝票番号" End If End Sub で上手くできましたが、同じクエリーで(2)も(1)と同様なVBAを組んだところ(顧客デーブルの顧客コードに重複があるときをチェックさせる)、(1)の重複をチェックしなくなってしましまいました。 うまく説明できたが心配ですが、根本的に何か違っていますでしょうか?

  • VBAで重複と未入力項目の判定をしたい

    現在Excelにて、D列、E列、F列にそれぞれ入力する欄を設けています。 D列は入力必須項目、重複不可、E列は重複OK、未入力OK、F列は入力必須項目、重複OK という条件です。 ユーザが情報を入力後、ボタンをクリックした際に上記の条件に当てはまらないか 判定する処理を盛り込むにはどうすればよいでしょうか。 ボタンクリック後は、エラーが該当した行のC列にそれぞれ 「重複」または「未入力有」または「重複/未入力有」と値を入れたいと考えています。 恐らく大きなFor文の中に判定するコードを書いて、最終結果にメッセージを表示し、 C列に値を入れる・・・という感じになると思うのですが、VBA初心者のため、 どうコードを書けばよいかわからず困っています。 可能であればコードを合わせてご教示いただけると大変助かります。 ざっくりとした質問で申し訳ありませんが、どうぞよろしくお願いいたします。

  • ACCESS入力での重複キーチェック

    ACCESSを初めて使う初心者です。 ACCESSで携帯電話の管理を行うデータベースを作ろうと考えています。 電話番号をキーにして携帯電話台帳にデータを入力するフォームを作りました。 当然、電話番号は重複なしのインデックス項目にしています。 しかしフォームを作って入力を行うと、最初に電話番号を入力した時には、 まだ重複のチェックは行われず、使用者等のすべての項目を入力し終わって、 次のデータの入力を行おうとした時に初めて、「重複キーがある」というような メッセージが出てきます。(一般使用者には分かりにくいメッセージだと思います) これを最初に電話番号を入力した時点で直ちに重複チェックを行って、 重複がある場合にはエラーにして、以下の項目の入力はさせないようにする。 そして適切な指示を表示するには、どうしたらいいでしょうか? マニュアルに書いてある通りにやってみて、一応できたという程度の全くの初心者 です。ピントの外れた質問かもしれませんがどうかよろしくお願いいたします。

  • ACCESSの重複チェックについて

    顧客データをACCESS2003にて作成しています。 フォームにてVBAを用いて重複チェックをしているのですが、件数が多いせいかチェックに時間が掛かっております。(入力済件数は10万は超えております。) テーブル(T_顧客管理)よりチェック出来るようにしており、チェックのフィールドは「住所」にしております。 Private Sub 住所_BeforeUpdate(Cancel As Integer) If DCount("住所", "T_顧客管理", _ "住所='" & Me!住所 & "'") > 0 Then Beep MsgBox "既存のデータと同じ住所が入力されました! " & _ "別の値を入力してください。", _ vbOKOnly + vbExclamation, "重複エラー" Cancel = True Me.Undo End If End Sub 上記の式を入れておりますが、別の方法(式)にて上記と同じ内容にてチェック出来る式があれば教えていただきたいと思いますので、宜しくお願い致します。

  • アクセスで重複データの入力

    アクセス97で顧客の管理しています。フォームから入力の際にカタカナで姓スペース名で入力していますが、入力の際に同じ名前があったら、メッセージでそのことが表示され、できれば内容が別フォームかテーブルでチェックできて、そこで入力を続行するか中止するか選択できるようにしたい。VBAが苦手なのでクエリーやマクロでできればうれしいのですが、簡単なVBAでできればVBAでも良いです。どなたか智恵をおかしください。

  • accessで重複を防ぎたい

    Access初心者です。 フォームで入力時に重複データを入力した場合 エラーメッセージとして受け付けないようにしたいのですが、もっとも簡単な方法を教えてください。 よろしくお願いします。

  • Accessで重複データを入力できないようにしたい。

    Access初心者です。 重複データを入力した際、任意のメッセージを表示して入力をできないようにしたいと考えています。 具体的には、 テーブル1に、「姓」「名」「勤務先」があり、 クエリ1をもとにフォーム1が「姓」「名」「勤務先」のテキストボックスを持っています。 フォーム上で「姓」と「名」を入力した際、「姓」&「名」が重複した場合(同姓同名の場合)に、他のコントロールへの移動やデータ保存ができないようにするにはどうしたらいいでしょうか。 できれば、マクロやVBAを使わずに済ませたいと思いますが、簡単な方法をご存知の方、教えていただければ幸いです。 よろしくお願いいたします。

  • Access2003での排他制御

    Access2003での排他制御 顧客管理をAccess2003で行っています。 新規で登録するときに顧客IDの重複チェックを[顧客ID_LostFocus]内で DCountを使って行っています。 [cmd登録_Click]で Set db = CurrentDb Set rst = db.OpenRecordset("顧客情報") With rst .AddNew ![顧客id] = me.txt顧客ID.value ![顧客住所] = me.txt顧客住所.value ![顧客TEL] = me.txt顧客TEL.value ・ ・ ・ .Update End With 以上の処理を行っています。 (1)Aさんが新規登録で顧客IDを入力 (2)重複されていないので顧客名や住所の入力をおこなう。 (3)Bさんが同じ顧客IDで新規登録 このケースの場合、 Aさんはまだ登録処理が済んでいない(登録ボタンを押していないためテーブルに反映されていない) ので(3)ではBさんの顧客IDは重複されていません。 Aさんが入力中の顧客IDをBさんが入力した時に「他のユーザーが使用しています」みたいな メッセージを表示するにはどのようにしたらよろしいでしょうか?? 文章が上手く書けなくてもうしわけありません、 何卒宜しくお願いいたします。

  • Excelでリストからの入力で重複不可にしたい

    お世話になります。 過去の質問で重複不可にする方法はわかったのですが 項目をリストから選ばせたい場合に入力規則を2つ以上 使用できないため困っております。 具体的にはA列に社名B列に商品リストとあり B列には何度もリストから選択します。 商品は同一のものがないため、重複不可にしたいのです。 また行を追加することはほとんどなく、B列のリスト選択は何度も選択します(商品を変えることが多々あります) 手入力であればCountifでできるようなのですが半角全角や 入力する人のくせで重複が出てしまいます。 非常に面倒な質問で申し訳ありません。 何かよい方法があればぜひ教えて頂ければ幸いです。

専門家に質問してみよう