[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『リストボックスをダブルクリック』(だぶるくりっく)
お世話になります。
リストボックスに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.