ヘッダー行から変数作成 ③ 変数宣言

前回は、VBEに貼り付けてもエラーにならないよう、変数名から禁則文字を少しだけ除去してみた。
infoment.hatenablog.com

今日も、前回の続きから。
f:id:Infoment:20201102225539p:plain

それでは、今日はリストの変数名から

DIm 〇〇 As △△

の形状に変形させてみよう。といっても、文字列を前後に追加すると、
以下の変更時に少々面倒だ。

  1. 宣言子(DimやPublicなど)
  2. 変数の型(StringやLongなど)

そこで、リストボックスの列数を1から4に変更し、各列に分けて
表示することにした。

  • 1列目 宣言子
  • 2列目 変数名
  • 3列目 As
  • 4列目 変数の型
ユーザーフォーム

列の数を増やす時、例えば「As」は必要最低限の幅があれば良い。
一方で、変数名にはそれなりの幅が欲しい。

そこで、リストボックスの列幅を、列数に合わせて取得することにした。

' リストボックスの列数に合わせて列幅変更。
Private Property Get ColumnWidth() As String
    Select Case ItemListBox.ColumnCount
        Case 1
            ColumnWidth = "280pt"
        Case Else
            ColumnWidth = "40pt;100pt;20pt"
    End Select
End Property

次いで、変数宣言文字列作成用のボタンを配置。
f:id:Infoment:20201102230205p:plain

名前は、DeclarationButton とした。都合が悪ければ変更する。
文字列作成後、複数列を同時選択して宣言子を変更したい。
ということで、リストボックスのMultiSelectプロパティも変更する。

Private Sub DeclarationButton_Click()
    Dim arr As Variant
        Select Case ItemListBox.ColumnCount
            Case 1
                arr = ItemListBox.List
                ItemListBox.ColumnCount = 4
                ItemListBox.ColumnWidths = ColumnWidth
                ItemListBox.MultiSelect = fmMultiSelectMulti
            Case Else
                Exit Sub
        End Select
        
    ReDim Preserve arr(ItemListBox.ListCount - 1, 3)
    Dim i As Long
        For i = 0 To UBound(arr)
            arr(i, 1) = arr(i, 0)
            arr(i, 0) = "Dim"
            arr(i, 2) = "As"
            arr(i, 3) = "String"
        Next
        
        ItemListBox.List = arr
End Sub

なお、リストボックス.List で得られる配列が、行列ともに0から始まる
二次元配列であることに注意が必要。

結果確認

それでは、昨日と同様「なんちゃって個人情報」で確認。
f:id:Infoment:20201102230637g:plain

とりあえず、想定通りの結果を得た。

次回は、選択行の宣言子および型変更に挑戦です。

参考まで。