[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォーム内のチェックボックス検索機能について』(ミッキー)
いつもお世話になっております。
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
下手くそな質問の仕方で申し訳ありません。
つまり、「月」で検索して「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.