• ベストアンサー

Accessで複数条件分岐。

T_マスタ(テーブル) ・年度 ・社員番号 ・社員氏名 ・所属 ・備考 T_社員一覧(テーブル) ・社員番号 ・社員氏名 ・所属 となっています。 F_マスタというフォームで、 社員番号を入れたら、自動で社員氏名と所属が入るようになっています。 そこで簡単なチェックをしたいのです。 今までは、入力された社員番号が、すでにT_マスタの中に入ってれば 「すでに入力されています」と表示し、それ以外だったら、そのまま入力するように しました。 現在の希望は、入力された社員番号が、すでにT_マスタの中に入っていて、 なおかつ、年度も同じだった場合は、「すでに入力されています」と表示し、 それ以外の、社員番号は一致するが、年度は一致しない場合や、どちらも一致しない 場合はそのまま入力できるようにしたいのです。 どのようにしたらいいでしょうか? ちなみに今までは、 If IsNull(DLookup("社員番号", "T_マスタテーブル", "社員番号 = " & CLng(Me!社員番号.Text))) Then Me![社員氏名] = Me![社員番号].Column(1) Me![所属] = Me![社員番号].Column(2) Else MsgBox "すでに入力されています。" End If こんな感じでした。 よろしくお願いします。 Ac2000です。

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

  • ベストアンサー
  • mantaro1
  • ベストアンサー率48% (19/39)
回答No.2

これは失礼いたしました。 If IsNull(DLookup("社員番号", "T_マスタテーブル", "社員番号 = " & CLng(Me!社員番号) & "and 年度 = " & CLng(Me!年度))) Then のように、「.text」を取ってやってください。値を取得する場合accessではコントロールを直接読んでやれば取れるようになっています。ここらへんがVBとは違うかもしれません。

KODAMAR
質問者

お礼

無事できました。 何度もありがとうございました。 ちょっとしたことなんですね。 そのちょっとしたことがわからないんですけど。。。 本当にありがとうございました!!

その他の回答 (2)

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

こんにちは。maruru01です。 テキストボックスのTextプロパティは、フォーカスが当たってないと、参照したり変更したり出来ません。 おそらく、このコードは[社員番号]のイベント(変更時か?)に書かれていると思いますが、[年度]のTextプロパティはこのままでは参照出来ません。 いくつか方法がありますが、簡単な方法は、 Me!年度.Text → Me!年度.Value にすることです。 これで不都合があれば別の方法を紹介します。 あと、社員番号だけでなく、年度の方でもチェックをする必要があると思うので、[年度]のイベント(変更時か?)にも同じようなコードを書く必要がありますが、ここでも同様の注意が必要です。 ただし、今度は[年度]のイベントなので、 Me!社員番号.Text → Me!社員番号.Value としなければいけません。 Me!年度.Textはそのままでいいです。 では。

KODAMAR
質問者

お礼

ありがとうございます。 No2の方のやり方でなんとか無事やることができました。 maruru01さんの方法も試してみたいと思います。 ありがとうございました。

  • mantaro1
  • ベストアンサー率48% (19/39)
回答No.1

If IsNull(DLookup("社員番号", "T_マスタテーブル", "社員番号 = " & CLng(Me!社員番号.Text) & "and 年度 = " = CLng(Me!年度.Text))) Then とかやればいいと思います。文字列上に「A and B」を書くのがポイントです。

KODAMAR
質問者

お礼

すばやい回答ありがとうございます。 早速以下のように変更してみました。 ---------------------------------------- If IsNull(DLookup("社員番号", "T_マスタテーブル", "社員番号 = " & CLng(Me!社員番号.Text) & "and 年度 = " = CLng(Me!年度.Text))) Then Me![社員氏名] = Me![社員番号].Column(1) Me![所属] = Me![社員番号].Column(2) Else MsgBox "すでに入力されています。" End If ---------------------------------------- すると結果が下のようなエラーになってしまいます。 ---------------------------------------- 実行時エラー'2185': コントロールがフォーカスを取得していないときに、コントロールのプロパティまたはメソッドを参照することはできません。 ---------------------------------------- これを回避するにはどうしたらよいのでしょうか? 申し訳ございませんが、よろしくお願いします。

関連するQ&A

  • 社員番号があったら抽出、なければ新規入力。

    Accessで、以下のようなテーブルとフォームがあります。 テーブル:T_マスタ 社員番号 社員名 所属 評価 テーブル:T_社員一覧 社員番号 社員名 所属 フォーム:F_マスタ 社員番号 社員名 所属 評価 F_マスタの「社員番号」に社員番号を入力すると、T_社員一覧のデータを参照して、 社員名・所属を自動で入力するようにしてあります。 使用者から、「間違えて同じ社員番号を入力したときに、何かメッセージが欲しい」といわれました。 T_マスタの「社員番号」のインデックスは「重複なし」となっていて、入力が終わると、 同じ番号がいる、ということがわかるのですが、それではなく、 社員番号に入力をして、確定した時点でメッセージが欲しいのです。 理想としては、 ■社員番号がすでにT_マスタに入力されていた場合 1.社員番号を入力     ↓ 2.「すでに入力されています。」というダイアログボックスを表示させ、 「社員番号」「社員名」「所属」「評価」を自動で入力させる。 ■社員番号がまだ入力されていなかった場合 1.社員番号を入力     ↓ 2.「社員名」「所属」が自動で入力される。 (今現在の状態がこれです。) というようにしたいのですが、どのようにすればよいのでしょうか?

  • 検索フォームで検索するものが決まっているときのかきかた。

    Ac2000です。 T_マスタというテーブルに 名前や所属の課、年度などが入っています。 このTマスタから検索する検索フォームがあります。 検索ボタンがいくつかあり、 年度を検索するようにテキストボックスがあります。 年度テキストボックスにいれた年度で検索しつつ、 押した検索ボタンによって検索する方法はどのようにしたらよいでしょうか? Ex.検索ボタンには所属の課などがかいてあり、「総務」「営業」などどかいてあります。 ソースはこんな感じです。 ------------------------------ Dim SQL As String Dim WhereCond As String Dim condNendo As String '年度 If Me!年度.Value <> "" Then condNendo = "(T_マスタテーブル.年度 = " & CLng(Me!年度.Value) & ")" WhereCond = WhereCond & " AND " & condNendo End If WhereCond = Mid(WhereCond, 6) DoCmd.OpenReport "R_マスタ_一覧", acPreview, , WhereCond End Sub

  • ACCESSの更新に関して

    初歩的な質問で申し訳ありません。 教えて下さい。 社員マスタテーブルと評価テーブルが以下の項目で存在しています。 《社員マスタ》  社員マスタ、氏名 《評価テーブル》  社員マスタ、評価 上記内容をフォームを使って、社員番号、氏名、評価 という項目を 表示させ、社員番号が存在するまで評価を手入力するというような仕掛けを考えています。 表示は参照クエリで社員番号をキーにして、両テーブルを結合させ、行う事はできるかと思いますが、データの入力を行う事ができない為、何か良い方法がないか?と考えています。 どのような手順が良いのかを教えて頂きたいと思います。 VBAで組まなくてもできるでしょうか・・・。 よろしくお願いします。

  • access検索フォームで期間抽出

    普通の文字入力による検索は If Me!氏名.Value <> "" Then condName = "(T_社員マスタ.氏名 like '*" & Me!氏名.Value & "*')" WhereCond = WhereCond & tempOper & condName End If のようにしています。 たとえば2000/10/1~2003/10/1 のように、ある一定の期間を指定してそれに当てはまるものを検索結果として出したい場合は、 上記をどのように変更すればいいのでしょうか?

  • Accessの検索フォーム(CLng)で。

    検索フォームの項目は以下の通りです。 ○ AND  ○ OR 名前  [    ] 項目  [    ]▼  [    ]▼  [    ]▼ もとになってるテーブルは ・名前 ・項目1 ・項目2 ・項目3 ・項目4 ・項目5 というようなっています。 (項目1-5は数値データなのであいまい検索はしたくありません。) 検索ボタンのコードは Select Case Me!検索方法.Value Case 1 'or tempOper = " AND " strCount = 5 Case 2 'and tempOper = " OR " strCount = 4 End Select '名前 If Me!SyainName.Value <> "" Then condName = "(T_マスタ.氏名 like '*" & Me!SyainName.Value & "*')" WhereCond = WhereCond & tempOper & condName End If If Me!項目1.Value <> "" Then condKoumoku1 = "(T_マスタ.項目1 = " & CLng(Me!項目1.Value) & ")" condKoumoku2 = "(T_マスタ.項目2 = " & CLng(Me!項目1.Value) & ")" condKoumoku3 = "(T_マスタ.項目3 = " & CLng(Me!項目1.Value) & ")" tempCond = tempCond & " OR (" & condKoumoku1 & " OR " & condKoumoku2 & " OR " & condKoumoku3 & ")" End If If tempCond <> "" Then tempCond = Mid(tempCond, 5) WhereCond = WhereCond & tempOper & "(" & tempCond & ")" End If WhereCond = Mid(WhereCond, strCount + 1) DoCmd.OpenForm "F_検索結果_一覧", acNormal, , WhereCond これを実行すると クエリ式 '((OR OR))' の構文エラー:演算子がありません。 と出ます。 どこを訂正すべきでしょうか? Access2000です。

  • ACCESSでのフォームから固定値での更新に関して

    初歩的な質問で申し訳ありません。 教えて下さい。 社員マスタテーブルと評価テーブルが以下の項目で存在しています。 《社員マスタ》  社員マスタ、氏名 《評価テーブル》  社員マスタ、評価、年月 上記内容をフォームを使って、社員番号、氏名、評価、年月 という項目を 表示させ、社員番号が存在するまで評価を手入力するというような仕掛けを考えています。 表示は参照クエリで社員番号をキーにして両テーブルを結合させ、フォームに出力しています。 上記条件の中で、フォームのヘッダーへ年月を入力する欄を設け、そこに入力されたデータで、 追加されるデータの年月を全て入力された年月にしたいと考えております。 何か良い記述?の方法はありますでしょうか。。。 教えて頂きたいと思います。 よろしくお願いします。

  • Accessで一致したデータを表示させたい

    Accessについて教えてください。 Accessで以下のようなテーブルを作っております。 (T1)テーブル1(社員データ) 社員NO オートナンバー 所属 テキスト型 氏名 テキスト型 (T2)テーブル2(面談データ) NO オートナンバー 日付 日付/時刻型 面談者氏名 テキスト型 面談者企業名 テキスト型 社員NO1 数値型 社員NO2 数値型 社員NO3 数値型 社員NO4 数値型 社員NO1,2,3,4はテーブル1の社員NOとリレーションでつながっています。 (T1)社員NO、(T2)NO以外のデータを最終的にレポートで表示します。 ここで、クエリ、フォーム、レポートをいづれでも作成するときですが、 日付(T2) 面談者氏名(T2) 面談者企業名(T2) 社員NO(T1)(非表示) 社員NO1の所属(T1) 社員NO1の氏名(T1) 社員NO(T1)(非表示) 社員NO2の所属(T1) 社員NO2の氏名(T1)・・・(社員NO3、4と続けて) という風に作りたいです。 クエリ、フォーム、レポートで作成すると、社員NO1(T2)の所属(T1)氏名(T1)、しか表示されません。(これでは当たり前かもしれませんが・・・) 社員NO2、3、4の所属、氏名も表示させたいです。 フォームやクエリ、レポートで社員NO2、3、4(T2)のデータと一致する社員NO(T1)の所属、氏名を表示させる方法はどのようにしたらよろしいでしょうか。 どうかよろしくお願い致します。

  • accessの前方一致検索について

    accessの前方一致検索について質問させてください。 テーブル名:テーブル1 カラム:ID、氏名 ID  氏名 1   山田 太郎 2   山本 博 3   吉田 浩太 上記のようなテーブルがあった場合に、 SELECT ID,氏名 FROM テーブル1 WHERE 氏名 = [氏名を入力してください] このSQLで氏名を入力すると完全一致することはわかったのですが たとえば「山」と入力したら、山田、山本の2名の結果が抽出できるよう 前方一致にしたいのです。 その場合前述のSQLをどのようにすればいいのでしょうか? 教えていただけると幸いです。

  • AccessのDLookupについて

    AccessのDLookupについての質問です。 いろいろ調べたのですがわからなかったので教えてください。 テーブル「社員」…ID、社員コード、氏名、所属、回数 フォーム…テーブルと同項目 フォームで社員コードを入力すると、自動的に氏名、所属が表示されるようにしました。 しかし、所属が変更になった社員氏名がうまく表示できません。 ~例~ ID_社員コード_氏名 _所属_回数 1_1234   _山田 _東京_1 2_1234   _山田 _東京_2 3_1234   _山田 _大阪_3 とあったときに、表示したいのはID_3のデータなのですが、ID_1のデータが表示になってしまうのです。(回数が最大の氏名、所属を表示したい) x = Nz(DMax("回数", "社員", "社員コード=" & [社員コード]), 0) Me!氏名 = DLookup("氏名", "社員", "社員コード=" & [社員コード]) _ & " and 回数=" & x) としています。エラーは出ません。 どこが変なのでしょう? よろしくおねがいします。

  • Access2002 フォームからのレコード入力の成功/不成功

    いつもお世話になっております。 早速ですが、従業員マスタテーブルがあり、それを元に従業員の情報を入力するフォームを作成しました。 従業員マスタテーブルは、「社員番号」だけをキーにしています。 例えば、新入社員のデータを、完全に新規に入力する場合、うまく行きます。 また、すでにいる社員の、「社員番号以外」のフィールドを更新することもできます。 しかし、社員番号が既存のものとかぶるような新規登録、あるいは情報変更に関しては、入力用フォーム上では正常終了したように見えますが、実際の従業員マスタテーブルをチェックしてみると、変更はされていません。 ですので、フォームしか触れないユーザは、自分の変更、新規追加がうまく行ったのかどうか、テーブルが見られないのでわからない、という状況になっています。 仕様要求としては、新規であれ、情報変更であれ、既存の社員番号に重なる場合はメッセージボックスで「更新失敗」を表示したいのです。 If Exist・・・のような分岐を情報を入力するフォームの「閉じる」ボタンの裏に設けたいのですが、やり方がイマイチわかっておりません。 ご存知の方がいらっしゃれば、ご教授、よろしくお願いします。 --------------------------------------------------------------- <従業員マスタ> ・社員番号・・・テキスト ・氏名・・・テキスト <仕様要求> 社員番号「0001」と「0002」の社員が存在する場合・・・ ・情報入力画面で、「0001」の社員の社員番号を「0002」に変更しようとすると、エラーメッセージ表示 ・新規情報入力(新入社員など)の際、社員番号が「0001」や「0002」の社員として登録しようとすると、エラーメッセージ表示 以上、お時間のあるときによろしくお願いします。

専門家に質問してみよう