プロが教える店舗&オフィスのセキュリティ対策術

ACCESSで社員の資格情報を入力するシステムを作成したのですが
以下の問題を解決できず困っています。

どうすればいいか
お力を貸して頂けないでしょうか?


■問題:メインフォームで別レコードに移動した際
サブフォーム内の連携コンボボックスを更新されない

□コンボボックス2の表示項目
1.分類別No
2.資格名ID
3.資格名

3のみを表示していますが、
1つ目のコンボボックス1の数値で
全コンボボックス2の資格名が出てしまいます。

■フォーム構成
メインフォーム内に以下を設置
1.移動ボタン
2.帳簿サブフォーム

□サブフォーム構成
レコード1 コンボボックス1 コンボボックス2
レコード2 コンボボックス1 コンボボックス2
~~
最終レコード コンボボックス1 コンボボックス2

■コントロールソース
コンボボックス1:大分類ID
コンボボックス2:資格名ID

■テーブル構成

資格名
 資格名ID(主キー)
 大分類ID
 分類別ナンバー(大分類ごとの登録順ナンバー)
 資格名
 
資格大分類
 大分類ID(主キー
 大分類名 (IT系・運転系など)


■コンボボックス2の値集合ソース(表示項目:資格名)

SELECT 資格名.資格名, 資格名.分類別No, 資格名.資格名ID
FROM 資格大分類
INNER JOIN 資格名 ON 資格大分類.資格大分類ID = 資格名.資格大分類ID
WHERE (((資格名.資格大分類ID)=[Forms]![メインフォーム]![サブフォーム]![コンボボックス1])) ORDER BY 資格名.分類別No;


------------------------------------
サブフォームに記載し効果のなかったVBAコード

’再クエリ
Private Sub Form_Current()
Dim cntrl As Control
If Not IsNull(Me![コンボボックス1]) Then
For Each cntrl In Form.Controls
If cntrl.ControlType = acComboBox Then
cntrl.Requery
End If
Next cntrl
End If
End Sub

’ソース更新
Private Sub Form_Current()
With Forms!メインフォーム名!サブフォーム名!コンボボックス2
.RowSource = .RowSource
End With
End Sub

■参考サイト
'サブフォーム内での2つのコンボボックスの連動について
'http://goo.gl/nfvxW
'~
'>   コンボボックスAの更新後処理イベントに
'> Me!コンボボックスB.Requery
'>
'Me.コンボボックスB.RowSource = Me.コンボボックスB.RowSource


'数値でコンボボックス選択
'http://goo.gl/ovZ3C

'リストボックスの行を選択するときは、「Selected(n)」を使います
'http://goo.gl/RbsWX

'サブフォームの指定
' =Forms!フォーム名!サブフォームコントロール名.Form.テキストボックス名
'http://goo.gl/vKxtj

A 回答 (2件)

失礼ですがあなたのやろうとしている事は


VBAを使わなくともACCESSの基本操作
即ちテーブルデザイン、リレーションシップ設定、
フォームデザイン(ウィザード利用)で実現出来ます
よろしいでしょか

テーブルは資格、資格大分類、社員の3つのテーブルです

T資格大分類
 ID 主キー(オートナンバー型)
 大分類名(インデックス 重複なし)
 分類別ナンバー(数値型-整数型)

T資格
 ID 主キー(オートナンバー型)
 資格名 (インデックス 重複なし)
 大分類ID(数値型-長整数型) T資格大分類のIDにリレーションシップ
  ※ T資格大分類を参照

T社員
 ID 主キー(オートナンバー型)
 社員名
 資格ID T資格のIDにリレーションシップ
  ※ フィールドプロパティーでT資格を参照

・リレーションシップの設定は大丈夫ですね

・T資格のデザインビューによる T資格大分類を参照
 [ナビゲーションウインドウ内のT資格を右クリック]→[デザインビュー]
 →[大分類ID]→[ルックアップ]
  ここでは表示コントロールはテキストになっています
 →[表示コントロールの入力枠の右端]→[コンボボックス]→[値集合ソースの右端]
 →[T資格大分類]→[列数 2]→[列幅 0]
  ※ 列数 2 はT資格大分類内のIDと大分類名
  ※ 列幅は IDと大分類目の表示幅(Cm)をカンマ区切りで入力ですが
    最後の項目幅は省略できます
   この設定によりテーブルを開くと大分類IDの位置に大分類名が表示されます

同じ要領でT社員のT資格を参照

・ウイザードによるサブフォームを持つフォームの作成
 このフォームはT資格大分類とT資格、T資格とT社員のフォームを2組作成します
 F資格大分類、F資格分類、F社員とF資格分類サブ、F社員サブのフォームを
 複数のアイテム形式で作成します

F資格大分類を例に手順を記述します。
 [ナビゲーションウィンドウ内のT資格大分類にマウスカーソルを移動して]
 →[作成]→[その他のフォーム]→[複数アイテム]
 これで出来上がりですが、フォームのデザインビューでIDを除去します
  ※ 主キーはオートナンバー型式なので内部で採番してくれますし
    表示されても意味不明で変更もできません

 同様にF資格分類、F社員も作成しておきます。
 F資格大分類のサブフォームとするF資格分類サブ、F資格分類のサブフォームとする
  F社員サブ も同様に作成しますがID,資格大分類ID、資格IDも除去します

最後はF資格大分類にF資格分類サブ、F資格分類にF社員サブをセットします
 F資格大分類をデザインビューで開きサブフォームツールをフォームフッターに配置すると
 単票フォームに変更するとコメントがありますが素直に受け入れて出来上がった
 後デザインビューで帳票フォームに変更します
「【Access】サブフォームのコンボボッ」の回答画像2
    • good
    • 2

質問内容を詳しく読んでませんが、サブフォームは帳票フォームなのでしょうか?



帳票フォームであれば、
一律に コンボボックス2 の条件を適用できないので、
・コンボボックスにテキストボックスを重ねる
・コンボボックスにコンボボックスを重ねる
これらの方法を取る必要があると思います。

要は、見せるものと、入力操作するものを別にして、重ねておく・・・・という事になります。
コンボボックス連携の導入(?)部分を過去回答していたので参照ください

accessの連結コンボについて
http://oshiete.goo.ne.jp/qa/7345694.html


単票フォームであれば、(参照先にも記述していますが)
単に、レコード移動時に Me.コンボボックス2.Requery すれば良さそうです。


余談)値集合ソース内でコントロールを参照する時

> 資格名.資格大分類ID=[Forms]![メインフォーム]![サブフォーム]![コンボボックス1]

この部分は、自フォームにあるコンボボックス1を参照するので

資格名.資格大分類ID=[コンボボックス1]

で動作したと思います。
後は、コンボボックス1 が選択されていない時の判別を盛り込まれるのかと・・・・
(必ず コンボボックス1 から操作するのであれば不要かも)
    • good
    • 0
この回答へのお礼

ありがとうございます!。
早速挑戦させて頂きます!。

お礼日時:2013/02/26 10:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!