2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ユーザーフォーム】ListViewでほぼ必ず設定するやつ【ExcelVBA】

Last updated at Posted at 2022-02-04

ListViewおまじない

ListViewの初期化のコードが冗長でいちいち書くのが面倒なのでプロシージャ化しておいてます。
色々プロパティがあるけどフォントサイズくらいしか変更することないのでフォントサイズだけ。

Sub testListViewおまじない
 Call ListViewおまじない(Me.ListView1, FontSize:=12)
End Sub

Sub ListViewおまじない(myListView As ListView, FontSize As Long)
  With myListView
    .View = lvwReport
    .LabelEdit = lvwManual
    .HideSelection = False
    .AllowColumnReorder = True
    .FullRowSelect = True
    .Gridlines = True
    .Font.Size = FontSize
    .Font = "Meiryo UI"
'    .CheckBoxes = True
    
  End With

End Sub

TextBoxおまじない

ListViewではないけどTextBoxで折り返し設定するのもこれでやってます。

Sub testTextBoxおまじない
  Call TextBoxの設定(Me.TextBox1, True)
End Sub

Sub TextBoxの設定(myTextBox As Variant, 折り返し As Boolean)
  With myTextBox
    If 折り返し = True Then
      .MultiLine = True
      .WordWrap = True
    End If
  End With
End Sub

ListViewのヘッダをクリックしてソートするやつ

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
  Call ListViewをクリック列基準でソートする(Me.ListView1, ColumnHeader)
End Sub

Private Sub ListViewをクリック列基準でソートする(myListView As ListView, _
                                          ByVal ColumnHeader As MSComctlLib.ColumnHeader)
'ListViewのカラムクリック時にクリック列基準でソートする
    With myListView
        .SortKey = ColumnHeader.Index - 1
        .SortOrder = .SortOrder Xor lvwDescending
        .Sorted = True
    End With
End Sub

ListViewの幅をキリよくするやつ

各列幅の合計からキリよくListView全体の幅を調整します。
マジックナンバーが15だったり他の値だったりは環境によりけり?


Private Sub ListViewの列を設定する(myListView As ListView, w非表示列 As Double)
  With myListView
    With .ColumnHeaders
      .Add , "_a", "列a", w非表示列
      .Add , "_b", "列b", 300
      .Add , "_c", "列c", w非表示列
      .Add , "_d", "列d", 400
    End With
    .Width = GetLV幅の合計(myListView, 15)
  End With
  
End Sub

Private Function GetLV幅の合計(myListView As ListView, w余白 As Double) As Double
  Dim ch As ColumnHeader
  Dim buf
  For Each ch In myListView.ColumnHeaders
    buf = buf + ch.Width
  Next
  GetLV幅の合計 = buf + w余白
End Function

コントロール名の前にいちいちMeをつけているのはインテリセンスをコントロールに絞るため。
たった3文字で得られるコスパの良さが気に入ってます。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?