• 締切済み

Accessのフォームにて顧客番号を検索して無ければ新規作成したい

Access2003のフォームで社員管理システムを作ろうとしていますが、VBAの記述でわからないことがあるので、教えてください。 まず、テキストボックス「txt_検索」に社員番号を入力し「cmd_検索」ボタンを押すと、社員管理テーブルの社員番号フィールドより検索をします。 社員管理テーブルに該当するレコードがある場合は、レコードの編集となり、社員番号がない場合はテキストボックス「txt_社員番号」に「txt_検索」の値を入れた新規レコードの作成としたいのです。 入力した値でレコードの検索をして、無いなら新規作成といったコードは どのような記述になるのか教えてください。 よろしくお願いいたします。

  • nkhall
  • お礼率84% (132/157)

みんなの回答

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

社員管理テーブルを元に作成されたフォームでしょうか。 レコードソースに社員管理テーブルが指定されており、 cmd_検索、txt_検索 は、ヘッダー部に作成されているものと仮定します。 以下一例) txt_検索 に入力あったら、まず既定値を設定し、検索後なかったら新規へ Private Sub cmd_検索_Click()   If (Len(Nz(Me.txt_検索)) > 0) Then     Me.txt_社員番号.DefaultValue = "'" & Me.txt_検索 & "'"     With Me.Recordset       .FindFirst "社員番号='" & Me.txt_検索 & " '"       If (.NoMatch) Then .AddNew     End With   End If End Sub ※ 社員番号がテキスト型の時の例です。 ※ 追加/削除/更新の許可を制御されていた場合には、.NoMatch 判別部分で設定してみてください。 全件を表示しておいて対象のところに移動・・・というのが前述した方法になります。 必要なものだけを表示するようにする方法の一例は以下。 レコードソースのクエリの社員番号抽出条件に [Forms]![フォーム名]![txt_検索] を指定します。 txt_検索 に入力後、 cmd_検索 で再クエリします。 (既定値も設定しておきます) Private Sub cmd_検索_Click()   If (Len(Nz(Me.txt_検索)) > 0) Then     Me.txt_社員番号.DefaultValue = "'" & Me.txt_検索 & "'"     Me.Requery   End If End Sub もしくは、cmd_検索 は不要で、txt_検索 の更新後処理で行います。

関連するQ&A

  • accessのVBで処理を作成したい(インプットボックスからの検索)

    こんにちは、 「出荷テーブル」 ID [オートナンバー] 伝票番号 [テキスト型] 商品   [テキスト型] 製造番号 [テキスト型] フォームに[txt製造番号]に入力した後に、テーブルから、入力した値と同じものを検索して、 あった場合→「出荷テーブル」にレコードを追加(検索したものと同じ内容で、伝票番号だけ「伝票番号+D」にする) なかった場合→メッセージ(在庫がありません)と出して、処理を中止。 いろいろ過去ログを探してみたのですが、どれを参考にすればいいのかわかりません。どなたか教えて下さい。お願いします。

  • Accessフォームの検索画面作成について

    ご存知の方、教えてください。 ・会員情報の単票フォームを作成し、同フォームのフォームヘッダーにテキストボックスとボタンを作成しました。 ・テキストボックスにフリガナの頭文字を入力し、ボタンを押すと、該当する会員のレコードが表示されるようにしました。 (VBAのFindRecordで作成) ここからが分からないのですが・・・。 ・フリガナに同じ頭文字を持つレコードが複数ある場合、「次へ」というボタンを押すと上部レコードから順に次のレコードが表示されるようにしたいのです。また、同じ頭文字のレコードがない場合は「検索が終了しました」というメッセージを表示したいのです。 VBAでどのような記述をすればいいのか、教えてください。よろしくお願いします。

  • Accessでの検索フォーム作成

    お世話になります。 Accessを使い始めて半月ぐらいの初心者です 次のような条件の検索フォームの作成を依頼されたのですがうまく出来ません。 (1)Accessのフォームフィルタを使用した検索フォームで、3つのテキストボックス(以下TB)を同一 フォーム上に用意し、抽出を実行するボタンと解除するボタンをTBの隣にそれぞれ用意する (2)あいまいな条件(部分一致)で検索出来るようにする (3)抽出結果も同一フォーム上に表示 (4)任意のTBに入力した値で抽出後、他のTBを利用し 絞り込み検索を実行できるようにしたい 現在は下記のように作成しました。 ●テーブル [管理番号]、[品名品番]、[仕入先名]のフィールドを持つテーブルを用意。 ●フォーム(表形式) 上記テーブルに連結した検索フォームを作成し、抽出する値を入力する TBの名前はそれぞれ下のように付けました。 フィールド名    TB名 ・[管理番号]⇒管理番号検索 ・[品名品番]⇒品名品番検索 ・[仕入先名]⇒仕入先名検索 ・[抽出実行ボタン]のイベント(管理番号で検索時) Private Sub コマンド47_Click() Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'" Me.FilterOn = True End Sub ・[抽出解除ボタン]のイベント(管理番号で検索時) Private Sub コマンド49_Click() Me!管理番号検索 = Null Me.FilterOn = False End Sub 他2つも同様に作成して実行した結果、単体での抽出はうまくいくのですが さらに絞り込もうと他のTBに値を入力して抽出を実行すると先の抽出が解除され 単体でのフィルタがかかって抽出されてしまいます。 どなた様か良い案が御座いましたらご指導ください。 初心者のため、説明不足な点があるかと思いますが 不明な点がございましたらご質問くださいませ。 宜しくお願い致します。

  • access クエリ 検索フォームの作り方

    よろしくお願いします。 やりたいこと: フォーム上で、テキストボックスに入力した値を検索して表示したい。 本やウェブで調べて、なんとか一度はやっと出来たのですが、 誤って何かを変更してしまい、使えなくなってしまいました。 今となってはどの資料を見て作れたのかわからなくなりました。 やったこと: クエリ :クエリA   条件にforms!フォームA!txt0を入力 フォーム:フォームA ヘッダーに非連結のテキストボックスtxt0を作成 txt0の更新後処理:docmd.requeryを入力 しかし、txt0に入力しても検索されません。 フォームのプロパティのレコードソース欄にクエリAを選択するようですが、 選択するクエリ名が表示されないので、クエリ名を入力しましたがダメでした。 どこか間違っているのでしょうか。VBAまでは勉強できないので上記範囲内でお願いします!

  • フォームで検索画面を作成しましたがうまくいきません。

    社員マスタ(社員NO,社員氏名、生年月日、・・・)を元に、 社員の情報を検索できるフォームを作成したいと思い、本を片手に以下のように作成してみました。 (1)社員マスタを元に選択クエリ(Q_社員検索)を作成。 社員番号の抽出条件 [Forms]![Q社員検索]![社員番号検索]  または(抽出条件は二段に分けてます) 社員氏名の抽出条件 Like [Forms]![Q社員検索]![社員氏名検索] & "" & "*" フォーム(F_社員検索)には、社員番号検索と社員氏名検索のテキストボックスを配置し、コマンドボタン(検索ボタン)をテキストボックスの横に配置。 マクロ(M_社員検索)はアクションがフィルタの実行、フィルタはQ社員検索としています。 コマンドボタンのクリック時イベントにこのM_社員検索を指定。 F_社員検索からは、「社員番号」または「氏名」から社員の情報を表示させたいと思っています。 が、、実際に作成してみると下記のような不備が発生しています。 (1)社員氏名を社員氏名検索のテキストボックスに入力して、検索ボタンを押す→正しく結果が表示される。 (2)社員番号を社員番号検索のテキストボックスに入力して、検索ボタンを押す→結果が正しく表示されない (3)(1)の後に、続けて(2)を実行した場合、フォームには、2レコード表示されてくる。 になってしまいます。 原因がよく分からず、四苦八苦しています。 当方アクセス初心者レベルですので、簡単な解決があれば教えていただきたく思います。

  • Access2003でフォームにあるコマンドボタンで更にフォームを開く

    Access2003でフォームにあるコマンドボタンで更にフォームを開くときのVBA記述で困っています。 Access2003で社員情報管理のデータベースを作成中です。 社員の情報を入力するにあたり、【基本情報】と【詳細情報】とでフォームを分けてあり、【詳細情報】を入力したい場合は、"基本情報フォーム"にあるコマンドボタンをクリックして"詳細情報フォーム"を開くようになっています。 この際、"基本情報フォーム"で開いている社員の【社員番号】を"詳細情報フォーム"の【社員番号】欄にも自動的に表示させるため、以下のようなVBAを記述しました。 Private Sub コマンドボタン_Click() DoCmd.OpenForm "詳細情報フォーム" Forms![詳細情報フォーム![社員番号].DefaultValue = Me![社員番号] End Sub 【社員番号】は7ケタの半角英数で、社員によって、数字だけの場合と、英数混じっている場合とがあります(データ型はテキスト型にしてあります)。 困っているのは、 1.上記を実行した際に、数字だけの社員番号は問題ないのですが、英数混じりの場合だと"社員番号"テキストボックスが「#Name?」という表示になってしまう 2."基本情報フォーム"のコマンドボタンをクリックして新規の"詳細情報フォーム"を開き(社員番号のみが反映され、他の項目は空欄の状態)、詳細情報を入力→保存したあと、別の社員番号で"基本情報フォーム"を開き、コマンドボタンで"詳細情報フォーム"を開くと、前に入力した社員の情報が出てきてしまう。 (つまり、"詳細情報フォーム"のもととなるテーブルに、1行でもレコードがあると、それが出てきてしまう。) 【詳細情報】は、 1.データを入力する社員としない社員とがいる 2.新規でレコードを作成する場合と、既存のレコードを上書きする場合とがある ので、もととなる"詳細情報テーブル"にその【社員番号の】レコードがなければ新規入力画面を、レコードがあればそのレコードを呼び出す形にしたいのですが、英数混じりの表示の件も含め、どうすれば、正しく表示されるか教えていただきたいです。 ぜひぜひよろしくお願いします。

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

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

  • Accessのフォームで値が見た目変更されない

    はじめまして、こんにちは。 Accessを使用して自社ツールを作成しています。 バージョン:Access2003 OS:WindowsXP フォームのレコードソースに、あるテーブルを連結させて一覧にして表示しています。 複数のコンボボックスを用意して、選択された値によって検索をかけ、 レコードソースの値を書き換えて再表示しています。 この検索はコンボボックスの更新後処理にVBAでSQLを記述して行っています。 Dim str_sql As String str_sql = str_sql & "select * from T_テーブルA where ○○コード = 1" Me.RecordSource = str_sql かなり省略していますが、実際はコンボボックスで選択された値によって SQLを生成しています。 フォームにはtxt_件数という名前でテキストボックスを用意してあります。 レコードソースを設定した後に、同じ条件でカウントし件数を表示しようと しているのですが、これがうまくいきません。 Me!txt_件数 = Nz(DCount("*", "T_テーブルA", "○○コード = 1"), 0) 件数が1件でもある時は正しい値が表示されます。 0件の場合は前回の表示のまま見た目上かわりません。 例) 1回目の検索で200件→テキストボックス[200]と表示 2回目の検索で0件→テキストボックス[200]と表示 3回目の検索で10件→テキストボックス[10]と表示 このような感じです。 ただし、実際は正しい値[0]が設定されているみたいです。 別のウインドウを一度フォームにかぶせて避けると[0]になりますし、、 2回目で[200]と表示されているものをコピーすると[0]がコピーされます。 Me!txt_件数 = Nz(DCount("*", "T_テーブルA", "○○コード = 1"), 0) If Me!txt_件数 = 0 Then Me!txt_件数 = 0 End If 馬鹿げていますが、このようにしても正しく[0]が表示されませんでした。 Accessを再起動しても状態は変わらず、困っています。 環境の問題でしょうか? 解決策など解る方いらっしゃいましたら教えてください。 よろしくお願いいたします。

  • Accessのフォームについて

    Accessで、テーブルへのデータ入力を簡易化するための、フォームを作成しています その中で、コンボボックスのなかから項目を入力したら 別に用意されているテーブルから 一致する項目をテキストボックスに 自動的に値を入力できるようにしたいのですが、 どのようにしたらいいのか、わかりません。 ~フォームに入力する項目~ 氏名、年齢、地区(コンボボックス)、地区コード、地区番号、住所、電話番号  等 ~地区テーブル~ 地区コード、地区、地区番号 調べてみたところ、プロパティのコントロールソースというところで、 値を持ってくるための式を作成するということでしたが・・・ 実践してみたのですが、初心者ゆえ、あまりよく理解できませんでした どうかよろしく御願いします。

  • Accessのフォームで…

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

専門家に質問してみよう