[[20190404225517]] 『ユーザーフォーム内のチェックボックス検索機能に』(ミッキー) ページの最後に飛ぶ

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

 

『ユーザーフォーム内のチェックボックス検索機能について』(ミッキー)

いつもお世話になっております。
VBA初心者ですので、お手柔らかにお願いいたします。

今回ユーザーフォームのチェックボックスについて教えていただきたく
ご質問いたしました。

チェックボックスの項目が100個以上あるユーザーフォームを作成しまして、
そのフォーム内でテキストボックスを使用してチェックボックスの項目を
検索できるようにしました。
部分一致で検索できるようにしたのですが、その検索する文字が複数の
チェックボックスに含まれている場合、最初の項目で止まってしまいます。
例:
「1月」「2月」「3月」というチェックボックスがあった場合
"月"で検索すると最初の「1月」で検索が止まる。

いろいろ検索して、なんとか上記の状態の検索フォームは作成することが
できたのですが、繰り返しの検索にするにはどう作成したらいいのか
行き詰りました。

現在の状態が下記です。

 Private Sub CommandButton1_Click()

 Dim ctrl As Control

 If TextBox1.Text = "" Then Exit Sub

 For Each ctrl In UserForm1.Controls
   If TypeName(ctrl) = "CheckBox" Then
   If InStr(ctrl.Caption, TextBox1.text) Then 
      ctrl.SetFocus
      Exit sub
    End If
   End If
  Next

  MsgBox "見つかりませんでした。"

 End Sub

また、検索で一致した項目にフォーカスが移るという仕様になっていますが、
それを点線のフォーカスではなく、チェックボックスの色を変えて表示する
ということは可能でしょうか?

つたない質問文で申し訳ありませんが、
何卒お力添えをよろしくお願いいたします。

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


 >繰り返しの検索にするにはどう作成したらいいのか

 どう繰り返すのか意味が解りません。

 >チェックボックスの色を変えて表示する

 CheckBoxのプロパティを見れば良いと思うけど、そういうことはしないの?
(BJ) 2019/04/05(金) 03:09

BJ様

下手くそな質問の仕方で申し訳ありません。
つまり、「月」で検索して「3月」にフォーカスを移したいけれども、
先にある「1月」で検索が止まってしまいます。
これを同じ文字が含まれている項目を順番に検索できるように
したいと思っております。
要するにCtrl+fのようなイメージです。

>CheckBoxのプロパティを見れば良いと思うけど、そういうことはしないの?

すみません、フォーカスが当たっているチェックボックスの色を
プロパティで変えられるということを知りませんでした。
恐れ入りますが教えていただけますでしょうか?

よろしくお願い致します。
(ミッキー) 2019/04/05(金) 10:50


 ボタン二つ追加して、次へ 前へとして
 こんなんでどうですか?
    Private defaultcolor As Long
    Private chkboxes() As Control 'CheckBox
    Private ibox As Long
    Private Sub UserForm_Initialize()
        Dim ctrl As Control
        ibox = -1
        For Each ctrl In Me.Controls
            If TypeName(ctrl) = "CheckBox" Then
                defaultcolor = ctrl.ForeColor
                'Exit For
            End If
        Next ctrl
    End Sub
    Private Sub CommandButton1_Click()
        '検索
        Dim ctrl As Control
        ReDim chkboxes(0)
        ibox = -1
        For Each ctrl In Me.Controls
            If TypeName(ctrl) = "CheckBox" Then
                If ctrl.Caption Like "*" & TextBox1.Value Then
                    ibox = ibox + 1
                    ReDim Preserve chkboxes(ibox)
                    Set chkboxes(ibox) = ctrl
                    ctrl.ForeColor = vbRed
                Else
                    ctrl.ForeColor = defaultcolor
                End If
            End If
        Next ctrl
        If ibox >= 0 Then chkboxes(0).SetFocus
    End Sub
    Private Sub CommandButton2_Click()
        '次のチェックボックスへ
        If ibox >= 0 Then
            ibox = IIf(UBound(chkboxes) = ibox, 0, ibox + 1)
            chkboxes(ibox).SetFocus
        End If
    End Sub
    Private Sub CommandButton3_Click()
        '前のチェックボックスへ
        If ibox >= 0 Then
            ibox = IIf(LBound(chkboxes) = ibox, UBound(chkboxes), ibox - 1)
            chkboxes(ibox).SetFocus
        End If
    End Sub
 12:02差し替え
(稲葉) 2019/04/05(金) 11:45

稲葉様

私がやりたいことが完璧に再現されました!!
本当にありがとうございます!!
(ミッキー) 2019/04/05(金) 13:04


コメント返信:

[ 一覧(最新更新順) ]


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