Access VBA初心者のためのソフトリストとソフトの関連付け方法

このQ&Aのポイント
  • 初心者向けのAccess VBAで、テーブルT_ソフトリストとT_ソフトを使ってフォームF_入力のコンボボックスに関連するソフト名を表示する方法を教えてください。
  • フォームF_入力のコンボボックスに使用者を入力すると、T_ソフトから使用者を探し、ソフトリストIDを取得し、そのIDを元にT_ソフトリストからソフト名を表示する方法を教えてください。
  • Access VBAの初心者ですが、フォームF_入力のコンボボックスに入力した使用者に関連するソフト名を表示する方法が知りたいです。テーブルT_ソフトリストとT_ソフトを使って関連付けを行う方法を教えてください。
回答を見る
  • ベストアンサー

Access vba 教えてください。 初心者です

以下のような テーブルT_ソフトリスト、テーブルT_ソフト フォームF_入力 があったときに、フォームの使用者のコンボボックスに入力をしたときに、 T_ソフトから使用者を探して、ソフトリストIDを取得し、そのソフトリストIDを元にT_ソフトソフトのソフト名をフォームのコンボボックスに表示させるようにしたいのですが、 どの様なソースコードを書けばよいでしょうか? 「T_ソフトリスト」←テーブル ================================== ID  | ソフト名 | ────────────── 1   | A |  2  | B |  3  | C |  4  | D |  5  | E |  ================================== 「T_ソフト」←テーブル ================================== ID |ソフトリストID | 使用者 | ─────────────────── 1 |  4     | 佐藤  | 2 |  2     | 鈴木  | 3 |  5     | 斉藤  | 4 |  1     | 佐藤  | 5 |  3     | 田中  | ================================== 「F_入力」←フォーム ================================== 使用者  [コンボボックス]←Combo_UserType ソフト名 [コンボボックス]←Combo_User ==================================

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

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

遅くなりました。 (1) Combo_UserTypeの設定 集合タイプ   テーブル/クエリ 値集合ソース  T_使用者 列数      2 列幅      0cm,2cm 連結列     1 リスト幅    3cm (2) フォームのコード '######ここから######## Private Sub Combo_UserType_AfterUpdate() 'MsgBox Me!Combo_UserType.Column(0) Me!Combo_User.RowSource = "" Me!Combo_User.Requery Me!Combo_User.Value = "" '変数宣言 Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim varSoft As String 'オブジェクト設定 Set db = CurrentDb Set rs1 = db.OpenRecordset("T_ソフトリスト", dbOpenDynaset) Set rs2 = db.OpenRecordset("T_ソフト", dbOpenDynaset) '検索開始 If rs2.RecordCount > 0 Then rs2.MoveFirst Do Until rs2.EOF 'データが見つかった時の処理 If CLng(Me!Combo_UserType.Column(0)) = CLng(rs2![使用者]) Then varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID]) Combo_User_NotInList varSoft, acDataErrAdded End If rs2.MoveNext Loop End If rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing db.Close: Set db = Nothing End Sub Private Sub Combo_User_NotInList(NewData As String, Response As Integer) If Me!Combo_User.RowSource = "" Then Combo_User.RowSource = NewData Else Combo_User.RowSource = Combo_User.RowSource & ";" & NewData End If Response = acDataErrAdded End Sub '######ここまで###### Combo_UserTypeの更新後では、いくつか変更しました。 (1) 「'データが見つかった時の処理」のコメント以下の2行。 もし、If文の中に入らないようであれば、 If CLng(Me.Combo_UserType.Column(0)) = CLng(rs2![使用者]) Then のように、両方、あるいはどちらか一方をCLngでキャストしてみて ください。たぶん、それで入ると思います。 (2) varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID]) にしましたが、もとの varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID] & "") でもデータは取れると思います。 (3) Me.Combo_UserType.Column(0) のようにして、コンボボックスでは名前を表示し、 非表示にしているIDをColumn(0)でコンボボックスの 列のインデックスで指定してIDを取得するように しました。 (4) 最初に抜けていたオブジェクトの後処理を最後に 追加しました。 たぶん、KtoTtoAさんが言われたキャストはCLng による型変換だろうと思います。。

KtoTtoA
質問者

お礼

回答有り難うございます。 当方の不手際で、列幅を修正するのを忘れていました。申し訳ございませんm(__)m これを修正したところ思ったとおりの動作致しました。 何度も丁寧な解説、ご指導ありがとうございました。

その他の回答 (18)

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

ちょっと微調整してみます。お待ちを。

KtoTtoA
質問者

補足

お手数おかけして申し訳ないですm(__)m よろしくお願いします。

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

【1】もし・・ >使用者は実際には別のテーブルで用意していて、 >数値型となっています。 ということは、T_ソフトの使用者は使用者IDの ような数値型で、T_使用者のようなテーブルが 別にあるといことでしょうか。 Combo_UserTypeで使うQ使用者は実際にはT _ソフトの使用者のフィールドをグループ化 して名寄せをし、名前を取り出し、使用者一覧 の代わりにしています。 こういう、経緯なので最終的に (1) Combo_UserTypeでは値集合ソースを T_使用者にし、Combo_UserTypeでは使用者名を 選択する機構にしますが、実際には使用者に 割り当てられた使用者IDをもとにT_ソフトの 使用者IDを検索し、同じ使用者IDを持つレコード から順次ソフト名を取り出し、Combo_Userに ソフト名を表示する、ということにします。 (2)したがって、T_使用者なる実際のテーブル名と 実際の使用者IDはどのような名称か、また 使用者は使用者でいいのか、そのあたりを聞かせて ください。 【2】 キャスト キャストと言う言葉が出てきたのでドッッッッキリ したのですが、もし・・その二 が想像したもので ないことを祈って、まずは 【1】もし・・ についてどうなのか、聞かせてください。

KtoTtoA
質問者

補足

回答有り難うございます。 「ということは、T_ソフトの使用者は使用者IDの ような数値型で、T_使用者のようなテーブルが 別にあるといことでしょうか。」 とおっしゃる通りT_使用者というテーブルがあり、下記のようになっています。 「T_使用者」←テーブル名 ID | 名前 | ────────── 1 | 田中  | 2 | 佐藤  | 3 | 鈴木  | 4 | 斉藤  | 名前:テキスト型 このようになっているので、実際には使用者を変数に入れて取得すると1や4といった数字が返ってくるようになっています。 (1)についてはコメントを頂いたとおりになっています。 これだと何か問題があるでしょうか?(・・;)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

ネットで探しているなら 『コンボボックス 連動 連携』 こんなキーワードで事例があると思います。 利用者を必ず先に選択でしょうか?。 利用者を決めたときのソフトは1つに絞られますか、複数ありますか?。 利用者を変えたら都度絞り込むため、利用者コンボの更新後処理でソフト側のデータを準備、となります。表示のもとになるソースを都度変えます。 ソフト側が1つならDLOOKUP関数も有効です。

KtoTtoA
質問者

補足

回答有り難うございます。 >利用者を必ず先に選択でしょうか?。 必ず先に選択します。 >利用者を決めたときのソフトは1つに絞られますか、複数ありますか?。 ソフトは複数になります。

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

No3の(3)フォームのCombo_Userの設定 のところで、クエリのSQL文を貼り付けたとき、 ずれていました。 SELECT T_ソフトリスト.ソフト名 FROM (T_ソフト INNER JOIN Q使用者 ON T_ソフト.使用者 = Q使用者.使用者) INNER JOIN T_ソフトリスト ON T_ソフト.ソフトリストID = T_ソフトリスト.ID WHERE (((Q使用者.使用者)=[Forms]![F_入力]![Combo_UserType])); 上記をはりつけてください。

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

ついでなので、No3の最後に述べて方法を載せて おきます。 【3】方法その三 (1)のバリエーション どちらかと言えば、このほうがメイン。 (1) Combo_UserTypeの設定 値集合タイプ   テーブル/クエリ 値集合ソース   Q使用者 列数       1 列幅       2 (2) 以下のコードをフォームのコード表に貼り付け、 保存してください。 '#####ここから##### Private Sub Combo_UserType_AfterUpdate() 'Combo_Userの初期化 Me!Combo_User.RowSource = "" Me!Combo_User.Requery Me!Combo_User.Value = "" '変数宣言 Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim varSoft As String 'オブジェクト設定 Set db = CurrentDb Set rs1 = db.OpenRecordset("T_ソフトリスト", dbOpenDynaset) Set rs2 = db.OpenRecordset("T_ソフト", dbOpenDynaset) '検索開始 If rs2.RecordCount > 0 Then rs2.MoveFirst Do Until rs2.EOF 'データが見つかった時の処理 If Me!Combo_UserType.Text = rs2![使用者] Then varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID] & "") Combo_User_NotInList varSoft, acDataErrAdded End If rs2.MoveNext Loop End If End Sub 'コンボボックスにデータを追加するプロシージャ 'AccessのバージョンによってはAddItemが使えるが 'バージョンがいろいろあるのでベタに作成 Private Sub Combo_User_NotInList(NewData As String, Response As Integer) If Me!Combo_User.RowSource = "" Then Combo_User.RowSource = NewData Else Combo_User.RowSource = Combo_User.RowSource & ";" & NewData End If Response = acDataErrAdded End Sub '#####ここまで###### 以上です。

KtoTtoA
質問者

補足

多数の回答有り難うございます。 No4のやり方でやりたいと思います。 このソースコード通り書いてみたのですが、デバッグをしたときに >If Me!Combo_UserType.Text = rs2![使用者] Then このIf文の中に入らないのですが、それはCombo_UserTypeの型と使用者の型とが一致していないからなのでしょうか? 現在、使用者は実際には別のテーブルで用意していて、数値型となっています。 Combo_UserTypeはテキスト型となっています。 キャストのようなものをすれば良いのでしょうか?

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

【2】方法その二 二つのコンボボックスの値集合ソースにデータを設定し、 二つのコンボボックスを連動させる方法です。 (1)とは違い、コンボボックスのプロパティで「値集合タイプ」 は「テーブル/クエリ」です。 (1) クエリの作成 以下のSQL文を新しいクエリのSQLビューに貼り付け、 「Q使用者」という名前で保存してください。 SELECT T_ソフト.使用者 FROM T_ソフト GROUP BY T_ソフト.使用者; (2)フォームのCombo_UserTypeの設定 値集合タイプ テーブル/クエリ 値集合ソース Q使用者 列数     1 列幅     2cm (3)フォームのCombo_Userの設定 値集合タイプ  テーブル/クエリ 値集合ソース  以下のSQL文を貼り付ける SELECT T_ソフトリスト.ソフト名 FROM (T_ソフト INNER JOIN Q使用者 ON T_ソフト.使用者 = Q使用者.使用者) INNER JOIN T_ソフ トリスト ON T_ソフト.ソフトリストID = T_ソフトリスト.ID WHERE (((Q使用者.使用者)=[Forms]![F_入力]![Combo_UserType])); 列数    1 列幅    2cm (3)フォームのコードの設定 以下のコードをフォームのコード表に貼り付け、保存してください。 Private Sub Combo_UserType_AfterUpdate() Me.Combo_User.Requery End Sub Private Sub Combo_UserType_Change() Me!Combo_User.Value = "" Me!Combo_User.Requery End Sub 以上、二つの方法です。分からないところがあれば 補足してください。 なお、(1)の方法で、質問に >フォームの使用者のコンボボックスに入力をしたときに とあるので、あくまでもコンボボックスに書き込んだ 場合としています。 (1)の場合、コンボボックスのCombo_UserTypeには、 (2)と同じようにコンボボックスにあらかじめ データをセットしておいて、そこから選び出す ことも簡単にできます。 そのように変更したいのであれば、補足してください。 少しの変更で済みます。

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

二つの方法を紹介します。少し入り組んでいますが、 じっくり検討してください。 量が多いので二つに分けます。 【1】方法その一 質問の内容そのままに、二つのコンボボックスに 何も設定しない、言わばテキストボックスのような 使い方。ただ、コントロールがコンボボックス というだけのものです。 DAOを使っているので、コード表の参照設定から、 Microsoft DAO xx Object Library にチェックが 入っているか確認してください。xxは3.6のような 数字です。なお、Microsoft ActiveX Objects Library xx にチェックが入っていたらチェックをはずしてください。 Combo_Userのプロパティで「値集合タイプ」を「値リスト」 にしてください。 Combo_UserTypeの更新後処理で設定します。 以下のコードをすべてフォームのコード表に 貼り付け、保存してください。 '#####ここから##### Private Sub Combo_UserType_AfterUpdate() '変数宣言 Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim varSoft As String 'オブジェクト設定 Set db = CurrentDb Set rs1 = db.OpenRecordset("T_ソフトリスト", dbOpenDynaset) Set rs2 = db.OpenRecordset("T_ソフト", dbOpenDynaset) '検索開始 If rs2.RecordCount > 0 Then rs2.MoveFirst Do Until rs2.EOF 'データが見つかった時の処理 If Me!Combo_UserType.Text = rs2![使用者] Then varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID] & "") Combo_User_NotInList varSoft, acDataErrAdded End If rs2.MoveNext Loop End If End Sub 'Combo_Userの初期化 Private Sub Combo_UserType_Change() Me!Combo_User.RowSource = "" Me!Combo_User.Requery Me!Combo_User.Value = "" End Sub 'コンボボックスにデータを追加するプロシージャ 'AccessのバージョンによってはAddItemが使えるが 'バージョンがいろいろあるのでベタに作成 Private Sub Combo_User_NotInList(NewData As String, Response As Integer) If Me!Combo_User.RowSource = "" Then Combo_User.RowSource = NewData Else Combo_User.RowSource = Combo_User.RowSource & ";" & NewData End If Response = acDataErrAdded End Sub '#####ここまで###### 方法その一はここまでです。 続く

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

クエリやVBAのどこまで知っているか、わからないですが・・・。 ID |ソフトリストID | 使用者 |取得 ─────────────────── 1 |  4     | 佐藤  |D 2 |  2     | 鈴木  |B 3 |  5     | 斉藤  |E 4 |  1     | 佐藤  |A 5 |  3     | 田中  |C =================== 選択クエリ使えば、上記の状態ができるかと思います。 これで5行から「鈴木」を選んだときは、「B」も決定されている、 という感じで考えてみたらどうでしょう。

KtoTtoA
質問者

補足

回答ありがとうございます。 1週間ほど前からネットを元に色々調べながらやっている初心者です…。 ご指摘いただいた様な方法で使用者コンボボックスに入力した場合、それを元にソフト名コンボボックスに入るのでしょうか? 説明不足でしたが、あくまで使用者を入力した後に、ソフト名を絞り込んで表示するようにしたいのですが…

関連するQ&A

  • ACCESS コンボボックス 日付入力VBA

    win10 office365 access365におきまして フォーム Fを開いて そのなかの非連結テキストが コンボボックスになっており そのコンボボックス名をcombo としますとき そこに規定の文字列 これは そのコンボボックスの選択文字列として あるもので たとえば、あかさ この文字列は コンボボックスを開くと 第1列に表示されます 一番左側です を入れたいとき Sub Sample() DoCmd.OpenForm "F", acNormal Form![F]!combo = "あかさ" end sub フォームFは当然開くのですが 非連結コンボボックス comboは 空白のままです Form![F]!combo = "あかさ" ここの部分を Form![F]!combo.column(0) = "あかさ" または Form![F]!combo.column(1) = "あかさ" としても 同様の結果となります ② もうひとつすみませんが テキストボックス コメントテキストに 本日の日付で 4月17日であれば 0417 と入れたいので Forms![F]![コメントテキスト] = Format(Now, mmdd) としますと 2024/04/17 13:02:59 と出てしまいます できるものなら 全角で 0417 と打ち出したいのですが、、 重ねて 恐縮ですが 御教示宜しくお願い致します

  • Access コンボボックスの絞り込み後の表示

    Access2002を使用しております。 コンボボックスAに連動したデータを絞り込みさせるコンボボックスBがありますが、一旦入力後は、コンボボックスAの値にかかわらずコンボボックスBに入力したデータを表示させるにはどうしたらよいでしょうか? 例として、次の3つのテーブルを基にデータベースを作成しております: メインテーブル フィールド名: ID 社名 担当者 社名テーブル ID   社名   住所 etc... ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 1    A社 2    B社  担当者テーブル ID   社名ID   担当者名  電話番号 etc... ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 1    1      木村 2    2      佐藤 3    1      田中 4    2      斎藤 メインテーブルを基にしてフォームを作成し、 「メイン」というフォーム名にして 「社名」「担当者」をフィールドのコントロールをコンボボックスに変更しました。 「社名」フィールドの値集合ソースを「社名テーブル」から引き出し SELECT [社名テーブル].ID, [社名テーブル].社名 FROM 社名テーブル; 列数2  で設定し、社名をコンボボックスで選択できるようにしました。 そして 「担当者」フィールドの値集合ソースを「担当者テーブル」から引き出し SELECT 担当者テーブル.ID, 担当者テーブル.担当者名, 担当者テーブル.社名 FROM 担当者テーブル WHERE (((担当者テーブル.社名)=forms!メイン.社名)); で設定しました。 「社名」フィールドの「更新後処理」で Private Sub 社名_AfterUpdate()     Me!担当者.Requery End Sub を設定しました。 「メイン」フォームをフォームビューで開き、「社名」コンボボックスで「A社」を選択すると 「担当者」コンボボックスで「木村」と「田中」が表示されるので、「木村」を選択します。 次のレコードに移り、「社名」コンボボックスで「B社」を選択すると 「担当者」コンボボックスで「佐藤」「斎藤」が表示されるので、「佐藤」を選択します。 さて、「佐藤」を入力した時点で、前のレコード(「A社」「木村」を選択)に戻ると 「担当者」欄が空欄で表示されます。 メインテーブルには全てデータは入力されています。 データ入力時は「担当者」コンボボックスは「社名」コンボボックスで選択した値に連動させたいのですが、 このようにデータ入力済みの場合は 最初のコンボボックスの値にかかわらず(この場合は直近に選択した社名がA社・B社のいずれかであろうとも) 入力済みのデータ(「木村」「佐藤」)がフォームに表示されるようにしたいのですが 何か良い方法はないでしょうか? 出来れば入力専用と読み取り専用のフォームを2つ使用するのではなく、1つのフォームで事足りればありがたいのですが・・・

  • Accessのフォームについて教えて下さい

    Access 2010のフォームについてお教え下さい。 テーブルにはテーブル名T1、フィールド「ID」、「Price」というテキストボックス。2フィールドがあります。 テーブルの各データは、 ID,Price 001,100 002,200 003,300 フォームにはにフォーム名F1、「cmb」というコンボボックスと、「price」というテキストボックスが配置されています。 「cmb」のデータは値集合ソースで、「SELECT T1.ID FROM T1;」と指定しています。 「cmb」で選択したデータのプライスを「Price」テキストボックスに表示したいと思います。 例えば、「001」を選択したら、「100」と表示されるようにしたいと思います。 色々調べているのですが、どうやってやるのかわかりません。どのように実現したらよろしいでしょうか? よろしくお願いいたします。

  • ソースコードをどう書いたらよいのかわかりません

    マイクロソフトAccess2007を使用しています。 (1)テーブルT_ゲームソフトからフォームF_削除のコンボボックスで入力した条件を満たすレコードセットを開き、 変数にゲームソフトIDを代入したいと思っています。 (2)(1)で取得したゲームソフトIDを条件として、テーブルT_使わないゲームからレコードセットを開き、 フォームF_削除から入力した値をテーブルT_使わないゲームの削除日フィールドに入力したいと思っています。 途中まで下記の様なソースコードを作成したのですが、挫折してしまい質問させて頂きました。 上記(1)(2)になる様なソースコードを作りたいと思っているのですが、この先どの様に書いて良いのかわからなかった為質問させて頂きました。 12,13,14行目にいたっては全く違うことをしていると思います… 当方初めてVBAを使用したので、おかしな部分が多々あると思いますが、ご指導お願いします。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 「ソースコード」 1 Dim Db As DAO.Database 2 Dim Rs As DAO.Recordset 3 Dim SQL As String 4 5 Set Db = CurrentDb() 6 Set Rs = Db.OpenRecordset("T_ゲームソフト", dbOpenDynaset) 7 8 strSql = "SELECT * FROM T_ソフト WHERE 名前 = Combo_SoftName AND 種類 = Combo_SoftType 9 10 Set Rs = Db.OpenRecordset(SQL, dbOpenDynaset) 11 12 Rs.Edit 13 Rs!ソフトリストID = Combo_softID 14 Rs!アンインストール日 = Uninstall 15 16 Rs.Update 17 Rs.Close: Set Rs = Nothing 18 Set Db = Nothing 19 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 「 T_ゲームソフト 」 ゲームソフトID| 名前 | 種類 ─────────────────────      1  |  A  | アクション              2  |  B  | SF              3  |  C  | シューティング              4  |  D  | スポーツ              5  |  E  | レース         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 「 F_削除 」 名前 【コンボボックス】 ←Combo_SoftName 種類 【コンボボックス】 ←Combo_SoftType 削除日 【コンボボックス】 ←Combo_Sakujo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 「 T_使わないゲーム 」 ゲームソフトID| 名前 | 種類  | 削除日 ─────────────────────────────      2  |  B  | SF      |        1  |  A  | アクション  |            3  |  C  | シューティング|              5  |  E  | レース    |          4  |  D  | スポーツ   |      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • コンボボックスのテキスト窓にデータを表示させたい

    オフィスソフト環境:ACCESS2007(諸般の事情により使用中) [アドバイスの背景とお願いしたいこと] ◆アドバイスの背景 コンボボックスを使ったフォームで入力を行っています。テーブルにはID(数値)「食材名、素材名」が入力されるのですが、フォームのコンボボックス「2段目」には素材名(入力済)が表示されません。但し、1段目のコンボボックスには数値ではなく食材名(入力済)が表示されています。 ◆お願いしたいこと(実現したいこと) 入力フォームを過去入力を遡り確認することもありますので、1段目同様に素材名(入力済)を表示させたいと思っています。 [対象オブジェクト] ◆テーブル:T_食材管理「質問対象フィールドのみ記載」 ・テーブル名:T_食材管理:食材名(数値型)、素材名(数値型) ・テーブル名:T_食材名:食材名ID、食材名 ・テーブル名:T_素材名:素材名ID、素材名、食材名ID ◆フォーム:F_食材管理「質問対象オブジェクトのみ記載」 ・フォーム(F_食材管理)のレコードソース名:T_食材管理 [1段目コンボボックスの設定] ・コンボボックス名:食材名(参照テーブル名:T_食材名) ・クエリビルダ設定フィールド:「食材名ID、食材名」 ・書式(列数):2 ・書式(列幅):0cm;2.551cm ・コントロールソース:SELECT T_食材名.食材名ID, T_食材名.食材名 FROM T_食材名 [2段目コンボボックスの設定] ・コンボボックス名:素材名(参照テーブル名:T_食材名) ・クエリビルダ設定フィールド:「素材名ID、素材名、食材名ID(抽出条件:[Forms]![F_食材管理]![食材名])」 ・プロパティーの書式(列数):3 ・プロパティーの書式(列幅):0cm;2.551cm;0cm ・コントロールソース:SELECT T_素材名.素材名ID, T_素材名.素材名, T_素材名.食材名ID FROM T_素材名 WHERE (((T_素材名.食材名ID)=[Forms]![F_食材管理]![食材名])); 説明にだらだらの羅列感をお感じになられるもしれませんが、簡潔に説明ができず申し訳ございません。宜しくお願いします。

  • Access VBAで自動連番を振るには

    【テーブル名】T_株券管理 【フォーム名】F_株主入力 【フィールド名】株主ID(テキスト型)(主キー) フォームに入力する際にオートナンバーを使用せずに、 レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。 本当はオートナンバーでIDを振っても良いのですが、レコードの削除等行った時に歯抜けになってしまうので、うる覚えで申し訳ないのですが・・・確か、フォームのテキストボックスのプロパティ、コードビルダでVBを「レコードが移動した際に」→「株主IDが0の場合に”00001”を、0でない場合には既存の数値に+1した数値をテーブルT_株券管理の”株主ID”に入力する。」といった感じの記述がしてあったと思います。VB初心者なので、説明が上手くできずにすみません。 このような記述方法はありますでしょうか?

  • アクセス2000でデータ抽出できない

    アクセス2000でデータ抽出できない サブフォーム上でコンボリストを使用して入力し、その条件にあったものだけを別のコンボボックスに表示したい。 フォーム:[取引名][種別][資材名] ※全てコンボリスト 取引先を選択し、種別を選択し、その2つの条件を満たすものだけテーブルから抽出し、資材名のリストに表示したいのですが、どうしたらできるかわかりません。

  • アクセス初心者です。(クエリについて)

    クエリでテーブルとテーブルをくっつけたいと思います。 T_MAIN→商品コード、商品一連番号、管理部門、統括責任者、マネージャー、担当者、保管場所、保管方法とあります。管理部門、保管場所、保管方法については小テーブルを作りました。それを元にT_MAINにてコンボボックスで項目一覧から選べるように作りました。統括マネージャ、マネージャー、担当者についてはT_名簿からこれも同様にコンボボックスで選べるように作りました。一つのフォーム内に非連結のテキストボックス(入力画面)と参照画面みたいな感じで、T_MAINに入っている情報一覧を並べて表示したいのです。T_MAINはコードで管理している部分が多いのでリストに表示する内容はクエリから引っ張ってくるようにしました。コンボボックスで表示がされるように、リストボックスの中に列幅2cm;3.808cm;3.808cm;2.508cm;4cm;2.503cm;等と指定して、値集合タイプにテーブル/クエリ、値集合ソースにクエリ名として表示するようにしました。管理部門、保管場所、保管方法はT_MAINと各小テーブルでリレーションを結びました。統括責任者、マネージャー、担当者については、一つのテーブルT_名簿とリレーションと結ぶと、クエリの内に入っているデータが消えてしまいます。リレーションをはずすと、3件しか入れていないものが、123、123、123と件数が増えていきます。解決策はないのでしょうか??宜しくお願いします。

  • アクセス初心者です。

    アクセスのフォームを作成しています。入力パターンが限られているので、コンボボックスで作成しました。コンボボックスのプロパティーでデータ⇒値集合タイプ”AAA”;”BBB”;”ccc”といれて、入力チェックをはい。リスト行数を3にして、作ったのですが、フォーム画面にしたときに、 AAA BBB CCC となっていないのです。”AAA”;”BBB”;”ccc”のまま選択リストにでてきます。なにがいけないのでしょうか??

  • Access VBAで自動連番を振るには

    Access2000で株主管理DBを作成中です。 【テーブル名】T_株券管理 【フォーム名】F_株主入力 【フィールド名】株主ID(テキスト型)(主キー) フォームに入力する際にオートナンバーを使用せずに、 レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。お手数ですが教えて頂けますでしょうか。よろしくお願い致します。

専門家に質問してみよう