Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7019 / 13644 ツリー ←次へ | 前へ→

【41649】リストボックスの選択について うくれれ 06/8/18(金) 10:15 質問[未読]
【41651】Re:リストボックスの選択について Blue 06/8/18(金) 11:01 回答[未読]
【41654】Re:リストボックスの選択について Jaka 06/8/18(金) 12:25 発言[未読]
【41655】Re:リストボックスの選択について Blue 06/8/18(金) 13:04 発言[未読]
【41658】Re:リストボックスの選択について Jaka 06/8/18(金) 15:41 発言[未読]
【41660】Re:リストボックスの選択について Blue 06/8/18(金) 16:03 発言[未読]
【41661】Re:リストボックスの選択について Jaka 06/8/18(金) 16:27 発言[未読]
【41712】勘違いしてました。 Jaka 06/8/21(月) 9:27 発言[未読]

【41649】リストボックスの選択について
質問  うくれれ  - 06/8/18(金) 10:15 -

引用なし
パスワード
   お世話になります。
リストボックス(複数選択が可能)に複数のデータがある場合で、
コマンドボタンクリック時に1つでも選択されていれば別の処理(印刷)に
移行し、1つも選択されていないときはメッセージボックスにて選択を促す
ようにしたいのですが、

Dim idx As Integer
 
    With ListBox1
     For idx = 0 To .ListCount - 1
      If .Selected(idx) Then '選択されていたら?
       rw = 6 + idx '名簿シートでの行番号をセット
       Call pr_data(rw) '一行分の印刷処理
      else
       MsgBox "リストから印刷対象を選択して下さい。", vbOKOnly
      End If
     Next idx
    End With

以上のようにすると、何も選択していない場合、リストの行数分メッセージボックスが繰り返しでてしまうので、リストが選択されているかいないかを知る良い方法はないでしょうか。

【41651】Re:リストボックスの選択について
回答  Blue  - 06/8/18(金) 11:01 -

引用なし
パスワード
   フラグ変数を使うとか。

Boolean型の変数を用意して、選択されていたらTrueにして、
ループの後、フラグの状態がFalseならば、選択されているものがないということで
MsgBoxを出す。

【41654】Re:リストボックスの選択について
発言  Jaka  - 06/8/18(金) 12:25 -

引用なし
パスワード
   別例

Private Sub CommandButton1_Click()
If ListBox1.ListIndex < 0 Then
  MsgBox "選択なし"
End If
End Sub

Private Sub UserForm_Initialize()
Me.ListBox1.List = Array(1, 2, 3, 4, 5)
Me.ListBox1.ListIndex = -1
End Sub

【41655】Re:リストボックスの選択について
発言  Blue  - 06/8/18(金) 13:04 -

引用なし
パスワード
   ▼Jaka さん:
> リストボックス(複数選択が可能)
より

>Private Sub CommandButton1_Click()
>If ListBox1.ListIndex < 0 Then
>  MsgBox "選択なし"
>End If
この方法は、MultiSelect が fmMultiSelectSingle のときしか使えないっぽいです。
Excel2003 Sp2(Windows Xp Sp2)では確認できませんでした。

【41658】Re:リストボックスの選択について
発言  Jaka  - 06/8/18(金) 15:41 -

引用なし
パスワード
   >この方法は、MultiSelect が fmMultiSelectSingle のときしか使えないっぽいです。
Private Sub UserForm_Initialize()
Me.ListBox1.List = Array(1, 2, 3, 4, 5)
Me.ListBox1.ListIndex = -1 ←これ入れました?
End Sub

1-fmMultiSelectMultiの場合はなぜか
こんな感じにフォーカスを持たせた後、矢印キーで移動させると明確な選択表示(青いやつ)は出ないみたいですが、

Private Sub UserForm_Initialize()
Me.ListBox1.List = Array(1, 2, 3, 4, 5, 6)
Me.ListBox1.ListIndex = -1
Me.ListBox1.SetFocus
End Sub

これで、選択されていることがわかります。
Private Sub CommandButton1_Click()
If ListBox1.ListIndex < 0 Then
  MsgBox "選択なし"
Else
  MsgBox ListBox1.List(ListBox1.ListIndex)
End If
End Sub

2-fmMultiSelectExtendedの場合は、ちゃんと選択表示(青い)が出ました。

2002SP3に変えられちゃったので、これしか確認できません。

【41660】Re:リストボックスの選択について
発言  Blue  - 06/8/18(金) 16:03 -

引用なし
パスワード
   ▼Jaka さん:
>Me.ListBox1.ListIndex = -1 ←これ入れました?
すいません。

  Me.ListBox1.ListIndex = -1
  Me.ListBox1.MultiSelect = fmMultiSelectExtended

としていたため、うまくいっていないかと思っていました。
MultiSelectプロパティの設定以降に Listindexプロパティを設定させないとだめなわけだったのですね。

ただ、“最初だけ”はうまく動くようですが、
選択して“選択状態を解除する”とどうでしょうか?
フォーカスのあるアイテムのインデックスが返ってきてしまいます。

シングルのときは、“解除する”というのがないのですが、
マルチのときはそれも考慮する必要があるということでしょうか。

【41661】Re:リストボックスの選択について
発言  Jaka  - 06/8/18(金) 16:27 -

引用なし
パスワード
   リストボックスの項目が選択されているかどうかって、
最初だけだから、あまり深く考えたことないです。
いったん選択させたら、後のことはどうでもいいんじゃないのでしょうか?
それ以降は、仕様によるんじゃないかと....。

【41712】勘違いしてました。
発言  Jaka  - 06/8/21(月) 9:27 -

引用なし
パスワード
   土曜日に検証してみたら、選択し直すということだったんですね。
ここまでは、思いがいたりませんでした。
ということで、私のは忘れてください。

因みに、1度選択て記憶されたインデックス番号は、MultiSelectプロパティらを1度別の種類のもに変えて元に戻さないとだめみたいでした

7019 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free