[[20170617153401]] 『リストボックスの選択状態解除』(てつ) >>BOT

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

 

『リストボックスの選択状態解除』(てつ)

 リストボックスの値をクリックした後、
 一番上の値では、選択状態が解除されるのですが、
 二番目以降では、選択状態が解除されず、同じ値を
 続けてクリックできません。
 すべての値で、クリック後、選択状態を解除するには
 どうしたらよいでしょうか。

 リストボックスのマクロ
 Private Sub ListBox1_Click()
 Dim シート名
 Dim シート名1
 Dim 現ブック名
 Dim i
 現ブック名 = ActiveWorkbook.Name
 On Error Resume Next
 If Workbooks(現ブック名).Worksheets(ListBox1.Text).Visible = False Then
 シート名 = ListBox1.Text
     シート名1 = Replace(シート名, " (非表示)", "")
     Worksheets(シート名1).Visible = True
     Sheets(シート名1).Select
 Else
 シート名 = ListBox1.Text
     Workbooks(現ブック名).Worksheets(ListBox1.Text).Visible = False
 End If
 On Error GoTo 0
 MsgBox ListBox1.Text    'これがあると、同じリストをクリックできる 他の方法は???
    Application.ScreenUpdating = True
 With ListBox1
     .Clear
 End With
 For i = 1 To Worksheets.Count 'リスト更新
     If Worksheets(i).Visible = True Then
         ListBox1.AddItem Worksheets(i).Name
     Else
         ListBox1.AddItem Worksheets(i).Name & " (非表示)"
     End If
 Next
 'ListBox1.ListIndex = -1  '入れても変わらない
 End Sub

 Private Sub UserForm_Initialize()
 Dim i
    For i = 1 To Worksheets.Count
        If Worksheets(i).Visible = True Then
            ListBox1.AddItem Worksheets(i).Name
        Else
            ListBox1.AddItem Worksheets(i).Name & " (非表示)"
        End If
    Next
 End Sub

< 使用 Excel:Excel2013、使用 OS:Windows10 >


携帯からなので未検証ですが。
もしかしたらイベントの連鎖が起こってませんか?
リストボックスのクリックイベントでリストの追加を行ってますね。
(カリーニン) 2017/06/17(土) 16:39

 さっそく、ありがとうございます。
 確かに、
 検証しているなかで、そのような状況が見られました。
 どのようにしたら、よいのでしょか?
 Application.EnableEvents = False
 Application.EnableEvents = true
 を最初と最後に入れてみたのですが、うまくいきません。
(てつ) 2017/06/17(土) 18:21

こんなのではだめですか?

 Option Explicit

 Private Sub UserForm_Initialize()
    Dim i As Long

    With ListBox1
        .ColumnCount = 2
        For i = 1 To Worksheets.Count
            .AddItem ""
            .List(.ListCount - 1, 0) = Worksheets(i).Name
            If Worksheets(i).Visible Then
                .List(.ListCount - 1, 1) = "(表示)"
            Else
             .List(.ListCount - 1, 1) = "(非表示)"
            End If
        Next
    End With

 End Sub

 Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim i As Long
    Dim シート名 As String

    i = ListBox1.ListIndex

    If i = -1 Then Exit Sub

    シート名 = ListBox1.List(i, 0)

    If ListBox1.List(i, 1) = "(表示)" Then
        On Error Resume Next
        Worksheets(シート名).Visible = False
        On Error GoTo 0
        If Worksheets(シート名).Visible = False Then
            ListBox1.List(i, 1) = "(非表示)"
        End If
    Else
        Worksheets(シート名).Visible = True
        ListBox1.List(i, 1) = "(表示)"
    End If

 End Sub

(マナ) 2017/06/17(土) 22:38


 マナさん
 ありがとうございます。

 MouseDownでは、試してみたところ
 タイミングによって、Wクリックしたときや
 クリックなど、何回かして
 表示、非表示が替わるようです。
 その後は、再度同じ個所をクリックすることは
 できるようになります。

 Clickでは、クリックしたときに
 表示、非表示が切り替わります。
 ただ、今のところ、一番上以外は、
 同じ個所をクリックできません。

 また、選択状態の解除もできるようになれば
 いいなと思っています。

 よろしくお願いいたします。

(てつ) 2017/06/18(日) 08:22


Application.OnTimeメソッドで、こんな感じでだめですか。

 Sub 選択解除()
    UserForm1.ListBox1.ListIndex = -1
 End Sub

 Private Sub ListBox1_Click()
    Dim i As Long
    Dim シート名 As String

   Application.OnTime Now(), "選択解除"

    i = ListBox1.ListIndex
    If i = -1 Then Exit Sub
    シート名 = ListBox1.List(i, 0)
    If ListBox1.List(i, 1) = "(表示)" Then
        On Error Resume Next
        Worksheets(シート名).Visible = False
        On Error GoTo 0
        If Worksheets(シート名).Visible = False Then
            ListBox1.List(i, 1) = "(非表示)"
        End If
    Else
        Worksheets(シート名).Visible = True
        ListBox1.List(i, 1) = "(表示)"
    End If

End Sub

(マナ) 2017/06/18(日) 10:17


 マナさん
 ありがとうございます。
 Application.OnTime Now(), "選択解除" については、
 こういう使い方ができると、初めて知りました。
 また、ColumnCountを二つにして
 2番目の列に(表示)(非表示) を示すことによって
 目的の動作が思うようになされていました。

 これで、選択状態を解除し、続けて同じ値を
 クリックすることができるようになりました。
 これから活用していきたいと思います。

 ありがとうございました。

(てつ) 2017/06/18(日) 13:43


コメント返信:

[ 一覧(最新更新順) ]


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