個人的に、会社の仕事で英語辞書を作っていましたが、ちょっと改造しました。
今までは、検索結果をメッセージボックスで表示させていたのですが見づらい。
モニターの表示が精細になるにつれて、この表示が小さくなったと感じました。
しかも、メッセージボックス内のフォントを太字に変えることもできませんな。
要するにMsgBox関数は注意喚起程度のものでしかなく、フォント変更は無理。
そうなると、やはりユーザーフォームを呼出して、表示させることになります。
この時、リストボックスでの表示が一般的ですが、リストビューもあるらしい。
グリッド線でセルを仕切れたりして、シートがユーザーフォームに再現される。
ただ、ツールボックスのデフォルトに表示がないので、追加設定を必要とする。
なので、ツールの奥の手っぽい気もしますが、使って見て便利なのが分かった。
設定は、ネットで探せるので省きますが、このツールは汎用性がありそうです。
しかも、ネットで検索するとVBA以外のプログラムグでも応用の紹介があった。
"Net Framework"とか、”C#”言語でのコードが散見されたりして、驚きだな。
なので、検索結果を見るためのツールとして活用されているのだと思いました。
それで、最初に組み込んだメッセージボックスは検索結果を一つずつ表示する。
連続検索はできますが、その結果をリストで俯瞰的に閲覧できないのが欠点ね。
なので、このリストビューを使えば、検索結果の一覧表示ができるから便利だ。
しかも、表示画面が小さくても、水平、垂直ともにスクロールバーが使えます。
しかも、フォントの種類も大きさも変更できるので読みやすい設定ができます。
個人的には、書体が、”MS UI ゴシック”で、サイズが11ポイントだとベストだ。
それで、連続検索の結果表示は、コマンドの”Find~FindNext”から実行します。
というわけで、忘備録として書きつつも、サンプルコードを紹介しましょうか。下に列挙しておきますが、実用的なコードを書くには、それなりにノウハウも必要ですので、先ずは試行錯誤しながら、プログラムして欲しいと持ったのでした。
*ThisWorkbookに記述
Private Sub Workbook_Open()
Load UserForm1 '表示はしないでリストビューに要素を書き込む目的
End Sub
*ユーザーフォーム1へのコード記述
Private Sub UserForm_Initialize()
With UserForm1.ListView1
'ツールボックス]の余白を右クリックして、[その他のコントロール]をクリック
'次に、”Microsoft ListView Control 6.0(SP4)”をチェック
.Height = 数値 '高さ・1pixel が 0.75point、注:目安程度
.Width = 数値 '巾
.Top = 15 'ユーザーフォーム内の上からの距離
.Left = 15 'ユーザーフォーム内の左からの距離
'VBEでのオブジェクト表示が正確にされないので、予め数値設定
.LabelWrap = True
''プロパティ
.View = lvwReport '詳細な表示
.LabelEdit = lvwManual 'ラベルの編集不可
.HideSelection = False '選択の自動解除
.AllowColumnReorder = Flase '列幅の変更を不許可
.FullRowSelect = True '行全体を選択許可
.Gridlines = True 'グリッド線許可
.Font.Size = ** 'Fontサイズの数値
.Font = "MS UI Gothic" ’等幅細目フォント
'一行目の列見出し、キー(文字列)、タイトル、カラム幅の設定、
'列数、カラム幅が、極端に多いとメモリー不足になり要注意
.ColumnHeaders.Add , "_Yomi", "読み", 180
.ColumnHeaders.Add , "_Tuduri", "つづり・表記", 145
.ColumnHeaders.Add , "_Pronounce", "Pronounce", 185
.ColumnHeaders.Add , "_Eng", "英語・English", 335
.ColumnHeaders.Add , "_Rmrk", "解説", 920
End With
End Sub
Private Sub CommandButton1_Click() ’ユーザーフォームのボタン
With UserForm1 'ユーザーフォームを隠してリストビュー要素の削除
.Hide
.ListView1.ListItems.Clear
End With
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then
MsgBox "閉じるボタンが押されました"
Cancel = True
End If '右上のXボタン押下げで閉じさせない・ボタンで常に閉じさせる
End Sub