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

解決


稲兎  2004-03-16 17:21:09  No: 112385  IP: [192.*.*.*]

フォーム上に、リストボックスを1つ作り複数選択を可能としています。
最終的に選択された複数のデータを変数へと代入したいのですが、どうすれば良いのでしょうか?

例えば・・・

リストボックスにて最終的に
林檎
蜜柑

の3つを選択したとすると・・・

変数A = 林檎
変数B = 蜜柑
変数C = 苺

とデータを取得したいと考えています。

良いご意見がありましたらご指導宜しくお願い致します。

編集 削除
いな  2004-03-16 17:58:02  No: 112386  IP: [192.*.*.*]

ほかの方はどうやっているのかは知りませんが、
リストボックスが選択される。(=SelectedがTrue)

というころで、

Private Sub Command1_Click()
'複数の項目を選択した場合の取得
    Dim ICount As Integer
    For ICount = 0 To List1.ListCount - 1
        If List1.Selected(ICount) Then
            Debug.Print List1.List(ICount), ICount + 1
        End If
    Next ICount
End Sub

ってな具合でどうでしょうか?

編集 削除
Mo1  2004-03-16 18:27:05  No: 112387  IP: [192.*.*.*]

Dim i_Cnt as integer

For i_Cnt=0 To List1.ListCount - 1
  If List1.Selected(i_Cnt)=True Then
     List1.List(i_Cnt)  '<これで選択されているItem名が取得可能なので
                          'あとは,変数にぶち込むだけです.
  End If
Next i_Cnt

編集 削除
稲兎  2004-03-16 18:32:55  No: 112388  IP: [192.*.*.*]

いな様

ご返答ありがとうございます。
エイミディエイトウィンドウにての結果は思った通りなのですが、
コレを各変数に代入するにはどうすれば良いのでしょうか?

リストボックスには

001  | 林檎
002  | 蜜柑

と表示しており、変数A = 001。変数B = 林檎。変数C = 002。変数D = 蜜柑。
と代入したいと考えています。

回答を頂いておきながら、どうしても自分では代入する事が出来ませんでした。
宜しければ、ご指導をお願い致します。

編集 削除
いな  2004-03-16 18:55:40  No: 112389  IP: [192.*.*.*]

ん〜、データの持ち方の問題かな。
こうゆう場合には、
配列に格納したほうが、いろいろと使いまわせて
便利です。

Private Sub Command1_Click()
'複数の項目を選択した場合の取得
    Dim ICount As Integer
    Dim SelectData() as Integer
    For ICount = 0 To List1.ListCount - 1
        If List1.Selected(ICount) Then
           SelectData(ICount) = List1.List(ICount)
           Debug.Print List1.List(ICount), ICount + 1
        End If
    Next ICount
End Sub

でどうでしょ?
(ん〜デバッグしてないから、動くか不安)

編集 削除
稲兎  2004-03-17 08:10:40  No: 112390  IP: [192.*.*.*]

いな様

更に回答を頂きましてありがとうございます。
実行してみますと・・・
<<インデックスが有効範囲にありません>>
とのメッセージが表示されてしまうのですが、コレはどういった問題なのでしょうか?

何度も申し訳有りませんが宜しくお願い致します。

編集 削除
さくら  2004-03-17 09:47:57  No: 112391  IP: [192.*.*.*]

これで出来るはずです。
各内容は調べてくださいね。

Option Explicit
Dim SelectData() As String

Private Sub Command1_Click()
  Dim Cnt As Integer
  Dim ICount As Integer
  
  Cnt = List1.ListCount
  ReDim SelectData(Cnt)
  
  For ICount = 0 To Cnt - 1
      If List1.Selected(ICount) Then
         SelectData(ICount) = List1.List(ICount)
         Debug.Print List1.List(ICount), ICount + 1
      End If
  Next ICount
End Sub

編集 削除
稲兎  2004-03-17 10:34:54  No: 112392  IP: [192.*.*.*]

皆様

私の分かり難い説明に最後まで返答して頂きありがとうございます。
ご意見を参考して思い通りの事が出来そうです。

本当に助かりました。
ありがとうございました。

編集 削除