[[20180122131156]] 『ListViewに交互にFocus有効にするには』(RX) ページの最後に飛ぶ

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

 

『ListViewに交互にFocus有効にするには』(RX)

ListViewを交互にFocus当てたいのですが
???部分ご教授お願いします。

If ??? = False Then
ListView1.SetFocus
Else
ListView2.SetFocus
End If

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


Private Sub UserForm_Click()
    If Me.ActiveControl Is Me.ListView1 Then
        Me.ListView2.SetFocus
    Else
        Me.ListView1.SetFocus
    End If
End Sub

こんなかんじですかね。。。
(まっつわん) 2018/01/22(月) 13:54


(まっつわん)さん
ありがとうございます。
CommandButton10_Clickでは動いてくれません?
何が原因でしょうか
よろしくお願いします。

Private Sub UserForm_Click() ←結果OK

Private Sub CommandButton10_Click()←作動せず

    If Me.ActiveControl Is Me.ListView1 Then
        Me.ListView2.SetFocus
    Else
        Me.ListView1.SetFocus
    End If
End Sub
(RX) 2018/01/22(月) 14:03

CommandButtonを押した瞬間に、アクティブなのはCommandButtonになってしまうから、ではないでしょうか?
共通変数を宣言して、ListView1を操作した際に1,ListView2なら2とセットしておいて、ボタンが押されたらこの値を元にSetFocusしてみては?
(???) 2018/01/22(月) 14:07

(???)さん
ありがとうございます。
>共通変数を宣言して・・・
この部分がわかりませんご教授お願いします。
(RX) 2018/01/22(月) 14:14

プロシジャの外で変数宣言すると、フォーム内共通の変数になります。

 Dim iSel As Long

 Private Sub CommandButton1_Click()
    If iSel = 2 Then
        iSel = 1
        Me.ListView1.SetFocus
    Else
        iSel = 2
        Me.ListView2.SetFocus
    End If
 End Sub

 Private Sub ListView1_Click()
    iSel = 1
 End Sub

 Private Sub ListView2_Click()
    iSel = 2
 End Sub
(???) 2018/01/22(月) 14:21

リストビュー以外にコントロールがあるなんて聞いてないべ(T^T)

モジュールレベルで変数を用意しておいてもいいけど、
Tagプロパティに名前を保持してみました。

Private Sub CommandButton1_Click()

    If Me.Tag = "ListView1" Then
        With Me.ListView2
            .SetFocus
            Me.Tag = .Name
        End With
    Else
        With Me.ListView1
            .SetFocus
            Me.Tag = .Name
        End With
    End If
End Sub

Private Sub UserForm_Initialize()

    With Me.ListView1
        .View = lvwReport
        .ColumnHeaders.Add Text:=Cells(1, 1).Value
        .ColumnHeaders.Add Text:=Cells(1, 2).Value
        .ListItems.Add Text:=Cells(2, 1)
        .ListItems.Add Text:=Cells(3, 1)
        .ListItems.Add Text:=Cells(4, 1)
        .SetFocus
        Me.Tag = .Name
    End With
    With Me.ListView2
        .View = lvwList
        .ColumnHeaders.Add Text:=Cells(1, 4).Value
        .ColumnHeaders.Add Text:=Cells(1, 5).Value
        .ListItems.Add Text:=Cells(2, 4)
        .ListItems.Add Text:=Cells(3, 4)
        .ListItems.Add Text:=Cells(4, 4)
    End With
End Sub

でも、なんで直接選択しないんでしょう。。。?
後学のために、ぜひ理由を。。。
(まっつわん) 2018/01/22(月) 14:26


(???)さんの 2018/01/22(月) 14:21に付け足しで。。

質問外のことでしょうけど、変数の適用範囲のお話はこちらをみるとわかりやすいかもです
http://officetanaka.net/excel/vba/variable/05.htm
(もこな2) 2018/01/22(月) 14:32


(???)さん
ありがとうございました。
無事希望通りできました。

(まっつわん)さん
ありがとうございました。
>でも、なんで直接選択しないんでしょう。。。?
以下利用中なので、直接選択で確定してしまうので。
この説明でいいのか?ですが一応

 Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

(もこな2)
プロシージャの中で宣言
Publicステートメントを使って宣言(パブリック変数)
宣言にも色々あることはわかりました。
ありがとうございました。
(RX) 2018/01/22(月) 16:20


コメント返信:

[ 一覧(最新更新順) ]


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