[[20121024191159]] 『リストボックスをダブルクリック』(だぶるくりっく) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『リストボックスをダブルクリック』(だぶるくりっく)
Excel2003

お世話になります。
リストボックスに10個の項目(行)があります。
複数の項目にチェックが入れられるようにしてあります。

3個目(3行目)の項目をダブルクリックしたときに、下記プロシージャーが実行されますが、
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

このプロシージャ内で、3個目を選んだ事を判断する事はできないのでしょうか??
※複数行にチェックが入っている場合があります。

分かりにくい説明で申し訳御座いませんが、分かる方がいれば宜しくお願い致します。


こんなことかな?

 Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        If ListBox1.Selected(3 - 1) Then
            MsgBox "3行目が選択されています"
        Else
            MsgBox "3行目は選択されていません"
        End If
 End Sub

 (ぶらっと)

 メンバが3個選択されたかどうかなら、changeイベントの方がよさそうですけどねえ

 Private Sub ListBox1_Change()
    Dim g0 As Long
    Dim cnt As Long
    cnt = 0
    With ListBox1
        For g0 = 0 To .ListCount - 1
          If .Selected(g0) Then cnt = cnt + 1
        Next
    End With
    If cnt = 3 Then MsgBox cnt & "個 選択されています"
 End Sub

 ichinose


 (ぶらっと)さん、ichinoseさん、お返事ありがとうございます。

説明不足で申し訳御座いません。
3個目と固定されているわけではなく、4個目をダブルクリックしたときは、4個目を
判断したいのですが、不可能でしょうか??
複数行選択していたり、ダブルクリックをするとそこの行のチェックがオンになったり
オフになったりしますので、Selectedを使わないで、ダブルクリックした所を判断したいのですが
無理みたいですよね?


 うん、無理だろうね。
 なぜ、複数選択可能にしてあるリストボックスで特定の行を選択するということをしなきゃいけないの?
 単一選択にしておけない理由は?

 そのリストボックスにいっぱいにリストが表示されている状態で表示される行数を与えれば
 スクロールされていない状態との前提付きでAPIのGetCursorPosを使って
 【その行かもしれない】あたりまでの把握は 推測できるかもしれない。
(実際にコードを書いて確認していないし、するつもりもないけど)

 (ぶらっと)

 >プロシージャ内で、3個目を選んだ事を判断する事
 この判断がDoubleClick以外の動作では 駄目なのか? を検討してみてください

 例えば、別にコマンドボタンを設けて、これのクリックで上記の判断をさせるとか・・・。

 ichinose@ロングブレスで腹筋が割れてきた


 (ぶらっと)さん、ichinoseさん、お返事ありがとうございます。

>なぜ、複数選択可能にしてあるリストボックスで特定の行を選択するということをしなきゃいけないの?
複数選択の操作がしたいのと、1つの行の明細を表示させたいから・・・で分かりますでしょうか?
二つのリストボックスを用意すればいいのですが、ひつつにまとめられるならと思った次第です。
ダブルクリックはリストボックスをダブルクリックした!という意味なのですね。
ダブルクリックした場所までは分からないということが分かりました。

そこで、このようにする事にしました。
他の方の参考になれれば幸いです。
VBAはじめて1ヶ月程の初心者ですので、間違いがあればご指摘下さい。
※変数の宣言などは割愛させて頂いております。

    j = 0
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then 'リストボックスにチェックが入っている場合
            j = j + 1
            str = ListBox1.List(i, 1)
        End If
        If j >= 2 Then
            MsgBox "注文を一つだけ選択してください"
            Exit Sub
        End If
    Next i
    If j = 0 Then
        MsgBox "注文を一つ選択してください"
        Exit Sub
    End If

 まだ、このようにしなければいけない理由が呑み込めないけど、そうしなければいけないとして。
 思いつきレベルだけど
 しかも
 >二つのリストボックスを用意すればいいのですが、ひつつにまとめられるならと思った次第です。 
 という意向にもちょっとだけはずれるけど。

 ListBox1で複数選択を行った状態で、その中のどれかをダブルクリックするという操作とまったく同じ手間で
 ListBox1 の横に ListBox2 を置く。列数はとりあえず1列。選択は単一選択。

 で、コードを以下のようにすると、ListBox2の選択でListBox1のどれが選択されたかを把握。

 Private Sub ListBox1_Change()
    Dim i As Long

    Me.Tag = "Skip"
    ListBox2.Clear

    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            ListBox2.AddItem ListBox1.List(i)
            ListBox2.List(ListBox2.ListCount - 1, 1) = i
        End If
    Next

    Me.Tag = Empty

 End Sub

 Private Sub ListBox2_Change()
    If Me.Tag = "Skip" Then Exit Sub
    MsgBox "選ばれたのは " & ListBox2.Value & " で、ListBox1上では " & ListBox2.List(ListBox2.ListIndex, 1) + 1 & " 件目です"
 End Sub

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.