• ベストアンサー

アクセスのリストボックスの複数選択

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

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.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画面目を閉じてやるようにする、 といったような変更をして下さい。

NEON-MUU
質問者

お礼

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

関連するQ&A

  • リストボックスの複数選択について

    ACCESS2003を使っています。 入力用フォームにリストボックスを作って 複数選択するようプロパティで変更しました。 この情報をテーブル上に反映させることができません。 どうしたらいいのかお教えください。 具体的には 入力用フォームに りんご(*) みかん かき(*) スイカ   (*)印は黒反転 この状態で入力するとテーブル上に りんご かき というように表示するようにしたいのです。

  • Access リストボックス複数選択を抽出条件に

    Access リストボックスで複数選択した値をクエリの抽出条件にしたいです。 ※PC環境:Win7 Access2007 Excel2007 リストボックスで複数選択した値を取得する事はできるのですが、 クエリ実行をすると結果が0件になってしまいます。 他の方のQAなどを参考に以下を作成しましたが、ほしい結果が得られず困っています。 おわかりになる方、ご教示いただけますようお願い致します。 <動作概要> 「画面」の「リストボックス」で複数選択し、 [実行]ボタンを押して、「リストボックス」で選択した値を、「テキストボックス」にセットし、 クエリの抽出条件に、in(テキストボックス)をセットし、テーブルから合致するデータを抽出したい <リストボックス> ※年区分テーブル参照 区分,区分名 1,1年 2,2~3年 3,4~5年 「2,2~3年」「3,4~5年」を選択 ※「区分」は数値型 <VBA> Private Sub 実行_Click()  Dim i As Variant  Me.テキストボックス = Null  For Each i In Me.リストボックス.ItemsSelected Me.テキストボックス = Me.テキストボックス & Me.リストボックス.Column(0, i) & "," Next If Me.テキストボックス <> "" Then  Me.テキストボックス = Left(Me.テキストボックス, Len(Me.テキストボックス) - 1) End If   'ここで画面を確認すると「テキストボックス」には、「2,3」 がセットされている DoCmd.OpenQuery "クエリ"   'テーブルには抽出条件に該当するデータがあるが、クエリ実行結果は0件 End Sub <クエリ SQL> SELECT テーブル FROM テーブル WHERE (((テーブル.区分) in([Forms]![画面]![テキストボックス]))); ※「テーブル.区分」は、数値型 どうぞよろしくお願い致します。

  • Accessのコンボボックスでリストが選択できない

    いつもお世話になっております、ありがとうございます。 コンボボックス1で部署名を選択し、 コンボボックス2でその部署の社員の名前を選択するようなフォームがあります。 コンボボックス1の値集合ソースで社員テーブルの一覧を参照し、 部署名のフィールドでグループ化して選択できるようになっています。 このとき、なぜかコンボボックス2では最上段にリスト化された社員名しか 選択できなくなります。 画面上では全員がリストとして見えているのに、 リストの2番目以降をクリックしても、一番上の社員しか入力されません。 プロパティで何か変な制約がかかっているのでしょうか? どなたかお分かりになる方がいらっしゃいましたら教えてください。 どうぞよろしくお願いします。

  • エクセルVBAで複数選択できるように設定したリストボックスの、選択され

    エクセルVBAで複数選択できるように設定したリストボックスの、選択されている項目の数を取得する方法はないでしょうか?

  • リストボックスの複数選択

    ワークシート上に配置するリストボックスで複数選択する場合に値(番号)を返す方法を教えてください。

  • Access97のフォーム(リストボックス)について

    Access97のフォームについてです。リストボックスで複数選択設定した場合,その選択項目をテーブルに反映させる方法を教えて下さい。

  • ACCESSフォームのリストボックスでレコードが選択できない

    ACCESS2000です。 フォームの左側に親テーブルのフィールド1の値を選択させるリストボックスがあり、そこで選択したレコードにリンクする子テーブルのレコードをフォームの右側にサブフォームで表示させたいのですが、リストボックスでレコードを選択できません(クリックしても反転しません)。でもレコード移動ボタンを押すと、リストボックス内の該当レコードがちゃんと反転し、右側のサブフォームにも正しく反映します。 リストボックスのプロパティはくまなく見ましたがそれらしい設定項目はみつかりませんでした。どこを直せばよいのでしょうか。

  • Accessでリストボックス

    フォームに複数選択可能なリストボックスがあり、そこで選択されたレコードをコマンドボタンをクリックしたときにテーブルに書き込みたいのですがどうすればよいかわかりません。HELPにも、またいろいろな書籍にも載っていませんでした。 どうかお願いします。

  • Access コンボボックスの複数選択

    Access2007を勉強中の初心者です。 「空白のフォーム」から作成したコンボボックスで、複数選択が可能になるような設定はありませんか? テーブル項目の「ルックアップ」「複数の値を許可」を許したテーブルから作成したフォームでは、コンボボックスで複数の値を選択可能になりますが、「空白のフォーム」から作成した場合にはできないのでしょうか。 リストボックスではスペースをとってしまう為、コンボボックスで行いたいです。 言葉足らずな内容かもしれませんし、大変お手数をおかけしますが、よろしくお願いいたします。

  • Access2000 複数列のリストボックス

    Access2000を使っています。 複数列で構成しているリストボックスの任意の行をVBAで選択状態にしたいのですが、 どうすれば可能でしょうか? 例えば2行目を選択状態にしたい場合、列数=1のリストボックスであれば lstTEST = lstTEST.ItemData(1) とコーディングすれば2行目が選択状態になってくれたのですが、 列数≧2のリストボックスだと、同様にコーディングしてもダメでした。 これはもう無理なこととあきらめるしかないでしょうか?