プロが教えるわが家の防犯対策術!

Microsoft Access 2010のvbaを使って、コンボボックスの連動を作りたいので、教えてください。


(社員名簿のテーブルから、コンボ0で、”所属”を取得し、コンボ4でその所属をもとに社員名簿テーブルをオープンし、コンボ4のプルダウンに氏名を設定し、最終的に氏名を決定したいのですが・・・。)
(1)最後の氏名を決定クリックしたときに、「このフィールドに入力した値が正しくありません」とのエラーメッセージが出ます。何かいい改善策はないでしょうか。

(2)それと、コンボ4のフォーカス時に動かしたいのですが、クリックしないとプログラムが動きません。どうしたらよいのでしょうか、改善策を教えてください。

(コードの中身については、すべてを理解しているわけではないので、すいません。)

---------------------------
"社員名簿"テーブル

(field名) (データ型)

ID オートナンバー型
氏名 テキスト型(10)
出身地 テキスト型(10)
生年月日 日付時刻型
性別 テキスト型(4)
所属部門 テキスト型(10)
---------------------------

ID(主key) 氏名 出身地 生年月日 性別 所属部門
1 佐藤裕也 大分県 1977/12/27 男 営業
2 鈴木剛 長崎県 1968/5/16 男 人事
3 高橋敬 東京都 1981/6/26 男 開発
4 田中賢太郎 奈良県 1978/8/26 男 営業
5 平井進二郎 京都府 1969/7/1 男 営業
6 安藤憲弘 愛知県 1976/4/10 男 経理
7 山田花子 青森県 1970/8/26 女 総務

---------------------------


(雑駁な質問の仕方で、すいません。)
わかる方、ご意見などご回答よろしくお願いします。

ソースは以下のとおりです。

--------------------------14:33 2015/04/03 暫定版-----------------------------------
Option Compare Database

Public str所属 As String
--------------------------------
Public Sub コンボ0_AfterUpdate()


str所属 = ""
str所属 = コンボ0.SelText

'更新後にスタティックメモリに所属を保存する。

Debug.Print "コンボ0.SelText:" & コンボ0.SelText

Debug.Print "str所属:" & str所属

MsgBox "str所属::コンボ0_AfterUpdate:" & str所属

End Sub

--------------------------------
Private Sub コンボ4_GotFocus()

'コンボ0で取得した所属で社員名簿コンボ4のプルダウンに氏名を表示する。


Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset

rs.Open "社員名簿", con, adOpenKeyset, adLockOptimistic

Me.コンボ4.RowSourceType = "Value List"

MsgBox "str所属:" & str所属

rs.MoveFirst

Do Until rs.EOF

If rs!所属部門 = str所属 Then

MsgBox rs!氏名
Debug.Print rs!氏名

'コンボ4のプルダウンに氏名を設定
Me!コンボ4.AddItem rs!氏名

End If

rs.MoveNext

Loop

rs.Close: Set rs = Nothing
con.Close: Set con = Nothing

End Sub

「Microsoft Access 201」の質問画像

A 回答 (2件)

Public Sub コンボ0_AfterUpdate()


Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
dim strSQL as string
Me.コンボ4.RowSourceType = "Value List"
str所属 = コンボ0.SelText
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset

strSQL = "SELECT 氏名 FROM 社員名簿 WHERE 所属部門 ='" & STR所属 & "''"
rs.Open strSQL, con, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Me!コンボ4.CLEAR
IF NOT RS.EOF THEN
Do Until rs.EOF
 Me!コンボ4.AddItem rs!氏名
 rs.MoveNext
Loop
END IF
rs.Close: Set rs = Nothing
con.Close: Set con = Nothing
コンボ4.setfocus
End Sub

とするとか、、

(コンボボックスにsqlそのまま書いたらだめなんだっけ?)
    • good
    • 0
この回答へのお礼

いかにプロトタイプ版を載せます。とりあえず、完成ということにします。ありがとうございました。


Private Sub コンボ4_GotFocus()

'コンボ0で取得した所属で社員名簿コンボ4のプルダウンに氏名を表示する。

'MsgBox "str所属:" & str所属

Dim strSQL As String
strSQL = "SELECT 社員名簿.ID, 社員名簿.氏名 FROM 社員名簿 " _
& " WHERE 社員名簿.所属部門 = '" & str所属 & "';"

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset

rs.Open "社員名簿", con, adOpenKeyset, adLockOptimistic

Me.コンボ4.RowSourceType = "Table/Query" '<---省略可

rs.MoveFirst

'コンボ4のプルダウンにID,氏名を設定
Me.コンボ4.RowSource = strSQL

rs.Close: Set rs = Nothing
con.Close: Set con = Nothing

End Sub

お礼日時:2015/04/07 11:50

他の処理系はともかく


Access ですから
テーブルを使った Access らしい処理の方が良くないですか?


例えばこんな風に。
コンボボックス作成の応用講座-1
http://www.accessclub.jp/samplefile/samplefile_1 …

いろいろ書かれていますが
要は、2番目のコンボボックスを 再クエリするコードを
1行書くだけです。
    • good
    • 0

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