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

リストボックスの設定方法を教えてください。

1画面目にテーブルと連結したリストボックスがあります。
複数選択した情報をSelectedプロパティで取得しています。

次画面にて同じテーブルに連結されているリストボックスを
1画面目と同じ様に選択されている状態にしたいのですが、
方法がわかりません。
選択されている内容だけをリストボックスに表示する方法は
見つけたのですが、同じ状態で選択される方法がわかりません。
ご回答、宜しくお願いします。

A 回答 (1件)

> 同じテーブルに連結されているリストボックス



とのことですが、ご質問のケースでは、必要な情報はリストボックスの値集合
ソース(RowSource)が同じかどうかだと思います。
(例えば、一方のRowSourceがTableA、他方のRowSourceがTableAを元に
 並べ替えだけ行ったQueryA、といった場合は、Selectedプロパティでは
 対応できないと思いますので・・・)

ですので、とりあえず、
 ・2つのリストボックスのRowSourceは共通
 ・1画面目の名前は「MF1」、2画面目は「MF2」
 ・1画面目のリストボックスは「LB1」、2画面目は「LB2」
 ・2画面目をアクティブにした時点で、1画面目での選択を反映
という前提で回答させて戴きます。

Private Sub Form_Activate()
On Error GoTo エラー処理

Dim FName As String, CName(1 To 2) As String
Dim Frm As Form, Cntl(1 To 2) As Control
Dim ItmCnt As Integer, i As Integer

'以下の3つの変数への代入値を、実際のフォーム名・コントロール名に
'してやれば、他の部分のコードは変更不要(のはず・・・)
FName = "MF1"       '1画面目のフォーム名
CName(1) = "LB1"     '1画面目のリストボックス名
CName(2) = "LB2"     '2画面目のリストボックス名

Set Frm = Forms(FName)
Set Cntl(1) = Frm.Controls(CName(1))
Set Cntl(2) = Me.Controls(CName(2))
ItmCnt = Cntl(1).ListCount - 1

For i = 0 To ItmCnt
Cntl(2).Selected(i) = Cntl(1).Selected(i)
Next

終了処理:
Set Frm = Nothing
Set Cntl(1) = Nothing
Set Cntl(2) = Nothing
Exit Sub

エラー処理:
MsgBox Err & ":" & Error$, , Me.Name & " Activate"
Resume 終了処理

End Sub


以上のコードを2画面目のフォームの「アクティブ時」のイベントに記述して
やれば、2画面目に切り替えたときに、1画面目での選択が反映されると
思います。

・・・ようするに、Selectedプロパティは参照・編集とも可能なので、片っ端
からベタで代入してしまいました、というわけです(汗)
なので、このやり方だと、2画面側がアクティブになる際には必ず1画面目も
開かれている必要があります。
1画面目を閉じたいようでしたら、
 a)配列変数に一旦記録してから2画面目で書き戻してやるか、
 b)2画面目でのコード記述場所を「開くとき(Open)」にして、「For ~ Next」を
 終えた後に2画面目側から1画面目を閉じてやるようにする、
といったような変更をして下さい。
    • good
    • 0
この回答へのお礼

記述頂いたコードで
無事に次画面に設定することが出来ました。
ありがとうございました。

お礼日時:2007/04/22 08:05

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