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)

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

>■初心者のよくある疑問・間違いや誤解 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200.html >マクロを「書いてみた」「動かした」「ダメでした」。 >よく、WebのExcelVBA関連の掲示板などで、 >初心者の方が他の質問の回答などを参考にして >マクロを作って動かしてみたものの、 >エラーになったり期待する結果でなかったりして、 >「なぜでしょうか」と質問を上げてくることがあります。 >そのマクロが自分で書いたものでも、 >Webサイトで見つけたものを変更したものでも、 >「マクロの記録」で作られたものであっても同じです。 >(記録したマクロは、最低限同じ環境で起動させないと同じ動作はしないばかりか、 >コードの記録パターンにある程度限りがあるので、 >そのままでも動かないケースもあるようです。) ということでコラムがあります。 VBAでもマクロでも同じです、回答をいかに有効に使うか。 回答はデタラメを教えているわけありません。 が、少なくとも「動かす前に」内容を確認してから、 同じことを自分の環境に実装する。 回答がどうであれ、 何がどうなっているか、を自分で考える過程も大事です。

KtoTtoA
質問者

お礼

ご指導、ご忠告有難うございます。 今回の質問の件は解決致しました。 ご忠告頂いたとおり、今後も自分で考え要点を整理しながら勉強していきたいと思います。

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

掲示板上はお互いが手探りで作っていく場でないでしょう。質疑応答、という域超えてます。 質問者は回答の要所だけに集中して自分の聞きたいことを進めたら良いです。 掲示板でコードを聞いたところで、どのくらい同じ環境状態かわかったものでない。そっくりそのまま稼動するとは思わない方が良いし、コピーするだけのやり方は上達遅い。掲示板の模範コードを期待できるのは中身が大丈夫と判断できるときでしょう。 今後のため 作業の進め方、これは見直しした方が良いです。こんな調子で進めたら今後も時間をロスします。 前述のように、整理してみること。要点つかんでますか?。 『エクセルでお仕事』 のサイトの VBAコラムをみること。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.17

Debug.Print "ソフトリストID=" & rs2![ソフトリストID] とか Debug.Print "strSql=" & strSql を怪しげな変数を記述した後に加えて、イミディエイトウィンドウに 出てくる結果を検討されては? また長くなってきていますので整理するうえでも現状をもう一度アップされては? チャンと経緯を追ってのレスではありませんけど・・

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

少し確認のため。 (1) Combo_Userは間違いなくコンボボックスですね。 リストボックスではないですね。 何故かというと、Selected(1)というプロパティ がコンパイルで引っかからないのはリストボックス以外に 考えられないからです。 (2) Accessのバージョンは何ですか。 (3) 提案のコードで、 If Nz(Combo_UserType) <> "" Then If (strSql = "") Then End Iff End If をコメントアウトして、、strSqlだけをコメント アウトしにままにするとどうですか。 (3) No10での、 If CLng(Me!Combo_UserType.Column(0)) = CLng(rs2![使用者]) Then varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID]) CLngで型変換してもデータが表示されないということですね。 (4) 提示したコードに何か付け足したりして実行した、 ということではないですね。

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

字数いっぱいだったので、つづきです。 提案のコードで、 Me!Combo_User.Column(1).Selected = True Me!Combo_User.Value = Me!Combo_User.ItemData(1) 設定したのは、Combo_Userに表示される データの数、たとえば表示されるソフト名を 一つにしたかったのか、あるいはsreSqlで取り込まれる 他のフィールドをソフト名だけにしたいので、 上記の設定をコード中にしたのか、いずれか だと思いますが、どちらでしょうか。 それと、Selectedについてはコードをコンパイル して、コンパイルが通るか確認してください。

KtoTtoA
質問者

補足

回答有り難うございます。 >「このフォームまたはレポートで指定されて >いる'(ソフト名)…'は存在しません。」 この件については、コードを貼り間違えていたようで、もう一度貼り直したら出来ました。失礼致しました。 Combo_Userの値集合タイプもコメントを頂いたように設定いたしました。コンパイル、実行が出来るようになったのですが、Combo_Userのコンボボックスに値が入らず、使用者を入力してもソフト名は空欄のコンボボックスが表示されてしまいます。 また、私が提案したコードでも同様の結果となってしまいました。 提案したコードのSelectedについてはコンパイルは通りました。以下2行については、参考にしたソースコードに記述されていたので、よく調べずに意味もなく使ってしまっていました。申し訳ございません。 Me!Combo_User.Column(1).Selected = True Me!Combo_User.Value = Me!Combo_User.ItemData(1)

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

【エラーについて】 >「このフォームまたはレポートで指定されて >いる'(ソフト名)…'は存在しません。」 エラーの位置は varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID]) のところですか。ここならば一応If文の中に入ったということですが。 varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID]) を varSoft = DLookup("[ソフト名]", "T_ソフトリスト", "[ID] = " & rs2![ソフトリストID] & "") のように末尾に & "" を追加し、変更しても出ますか。 あるいは、デバッグ出来ない表示のみの場合も あるかもしれませんが、いずれにしても、 コード中のテーブル名やフィールド名に間違いがないか、 あるいは、IDなどがテーブルでは全角文字になっていないか 確認してみてください。また、コードの張り間違いが ないか確認してみてください。当然ながらコンパイル をしてみてください。 それと、No10の Combo_Userの設定については変更はありません。 としてのは、Combo_Userの値集合タイプは値リストとした ことに変更はない、と言う意味です。これも確認してください。 原因をかならず突きとめる必要があります。 【提案のコードについて】 この方法は、まさにコンボボックスの連動で、 No2(これは訂正する必要があるためNo13で対応してください) とNo13で述べたコンボボックスの値集合ソースを後から 指定しているだけのものです。したがって、SQLL文は 同じSQL文をつかいます。 そこでstrSqlを、 strSql = "SELECT T_ソフトリスト.ソフト名 " strSql = strSql & "FROM (T_ソフト INNER JOIN T_ソフトリスト ON T_ソフト.ソフトリストID = T_ソフトリスト.ID) INNER JOIN T_使用者 ON T_ソフト.使用者 = T_使用者.ID " strSql = strSql & "WHERE (((T_ソフト.使用者)=[Forms]![F_入力]![Combo_UserType]));" に置き換えてください。SQL文が長いのでstrSqlは 文を区切りながらstrSqlに取り込みます。 なお、各strSqlの""中の文の末尾は途中まで 半角開けてあることに留意してください。 【提案のコードについて】その2 Combo_User.RowSourceType = "Table/Query" Combo_User.RowSource = strSql Combo_User.Selected(1) = True Combo_User.Value = Combo_User.ItemData(1) Me!Combo_User.Requery まず、 Me!Combo_User.RowSourceType = "Table/Query" Me!Combo_User.RowSource = strSql Me!Combo_User.Selected(1) = True Me!Combo_User.Value = Combo_User.ItemData(1) のように、Meキーワードをつけてください。 本来は、この部分は、上記のstrSqlのSLECTのところで SELECT T_ソフトリスト.ソフト名 のように取得するデータを絞っているのでソフト名 だけが出てきます。したがって、 Me!Combo_User.RowSourceType = "Table/Query" Me!Combo_User.RowSource = strSql Me!Combo_User.Requery だけで、いいはずです。それから、 Combo_User.Selected(1) = True Combo_User.Value = Combo_User.ItemData(1) この部分についてですが、リストボックスには 複数選択のときに使用するSelectedプロパティ はありますが、コンボボックスにはないはずですが。 バージョンが違うと追加されたのですかね。 また、 Me!Combo_User.Value = Me!Combo_User.ItemData(1) はデータが複数ある場合にItemData(1)と設定すると Combo_Userに二番目のデータがすぐ表示される、 というこです。つまり、ソフト名が複数あると 二番目のソフトがすぐ表示されます。

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

No10の Combo_Userの設定については変更はありません。 なお、Combo_UserTypeの表示で列幅を 0cm;2cm に設定していますが、 2cm;2cm にして、使用者IDが見える状態にしても 検索結果には影響はないので、そのように したい場合は列幅を変更してみてください。 コンボボックの連動の場合について、変更があります。 (1) Combo_Userの値集合ソースに設定するSQL文を以下に します。以下をコピーしてCombo_Userの値集合ソース に貼り付けます。 また、このSQL文を新しいクエリの SQLビューに貼り付け、デザインビューにしてテーブル間の 結合線、抽出条件、などを確認してみてください。 またこのクエリを実行してパラメータのフォームに 数値を入れるとソフト名が表示されます。 SELECT T_ソフトリスト.ソフト名 FROM (T_ソフト INNER JOIN T_ソフトリスト ON T_ソフト.ソフトリストID = T_ソフトリスト.ID) INNER JOIN T_使用者 ON T_ソフト.使用者 = T_使用者.ID WHERE (((T_ソフト.使用者)=[Forms]![F_入力]![Combo_UserType])); (2) Combo_UserTypeの値集合ソースはT_使用者です。 (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 コンボの連動は将来使うことが出てくる可能性が 高いので、この際に中身を観察してみてください。 わからないことがあれば補足してください。

KtoTtoA
質問者

補足

コメントが遅くなり申し訳ございません。 多数のコメント、丁寧な解説有り難うございます。 NO.10でコメントを頂いた様に書いてみたのですが、 「このフォームまたはレポートで指定されている'(ソフト名)…'は存在しません。」 と出てしまいました。 コンボの連動についてはご指導頂いたとおりやってみました。 今後に活かすことができそうな便利な物なので使いこなせるように勉強したいと思います。 本題の質問の方ですが、自分でもソースコードを考えて作ってみたのですが、これではソフト名が全て出てしまいうまくいきませんでした。 新たな質問になってしまいますが、SELECT文でフォームで使用者を入力し、ソフト名を取得することは出来るでしょうか? お願い致します。 Private Sub Combo_UserType_AfterUpdate() Dim strSql As String Dim strSql2 As String Combo_UserType.SetFocus If Nz(Combo_UserType) <> "" Then If (strSql = "") Then strSql = "SELECT T_ソフトリスト.ID, T_ソフトリスト.ソフト名, T_ソフト.使用者 ,T_ソフト.ソフトリストID FROM T_ソフト, T_ソフトリスト WHERE T_ソフト.使用者 = " & Combo_UserType & ";" End If End If Combo_User.RowSourceType = "Table/Query" Combo_User.RowSource = strSql Combo_User.Selected(1) = True Combo_User.Value = Combo_User.ItemData(1) Me!Combo_User.Requery End Sub

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

解決へ向かっているようで、そうでないなら、当初の疑問が残っているならはっきりしましょう。 いっぱい書かれてもわからないとかレベル高すぎるとか。まだ試行錯誤しているとなると、コンボボックスの使い方から確認した方がいいのでは?。 コンボの表示ネタはどこで定義するか、表示列の制御は、とか基本的なところ。 コードみたままやれば、やりたいことは実現でしょうが、KNOW-HOW、テクニック、得るものが少ないのはもったいない。 どちらかと言えばこちらのが後から役に立つものです。 最悪なのは、結果が出たから質問締める。結果が出たが自分では何もできない、そこで、また同じような質問をする。その繰り返し。 ステップアップできてないことでしょうね。 ここらで、整理してみては?

KtoTtoA
質問者

補足

回答有り難うございます。 試行錯誤と言うのは、自分でも考えてソースコードを書いてみていたので「試行錯誤」という言葉を使わせていただきました。誤解を招くような言い方をしてしまい、申し訳ございません。 頂いたコメントのご指摘、ご指導を元に自分でも考えて勉強させて頂いています。

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

コンボボックスを連動させる例では、 Q使用者をT使用者に変更し、Combo_User の値集合ソースのT_ソフトとT使用者の 結合線をT_ソフトの使用者とT_使用者の IDに設定します。

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

自己解決できる方向に進んでいますか?。 作ってもらうのを待っていませんか?。 >どの様なソースコードを書けばよいでしょうか? 解決でしょうか?。 参考で。 http://www.accessclub.jp/ http://www.mahoutsukaino.com/

KtoTtoA
質問者

補足

ご指摘有難うございます。 アドバイスを参考に自分でも試行錯誤しながら考えていますが、まだ解決しておりません。 コメントを頂いたHPも参考に頑張ってみます。

関連する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等調べているのですが、必要な情報が探せずに困っています。お手数ですが教えて頂けますでしょうか。よろしくお願い致します。