ヘッダー行からEnum作成 ② よく使うパターンをセット

前回は、表等のヘッダー行からEnumを設定する文字列を作成してみた。
infoment.hatenablog.com
今日も、前回の続きから。
f:id:Infoment:20201110231604p:plain

作りながら、何度もテスト用に入力するうち、その入力自体が
とても面倒くさくなってきた。
f:id:Infoment:20201110231748p:plain

楽をするためのツールで、面倒臭くなってどうする。
ということで、頻繁に使用する仕様値を一括入力することとした。

ユーザーフォーム

今回の一括入力対象は、以下の三つだ。

  1. Enumの名称:今回は「列名」とした。
  2. 各要素の頭:今回は「en」とした。Enumの頭二文字を採用。
  3. 要素の初期値:「1」とした。列番号に対応させることが多いので。

f:id:Infoment:20201110232144p:plain

なお、チェックボックスは以下のとおり命名した。都合が悪くなれば、
のちほど変更する。

  1. 最初の値を1とする:From1CheckBox
  2. 本ツールの既定値をセット:EnumDefaultCheckBox

まず、Enum作成ボタンを押したとき、From1CheckBoxにチェックが入っていた
場合の処理を追加する。

' Enum作成ボタンクリック。
Private Sub EnumButton_Click()
    
    ' Enum ~ End Enumまでの全行を格納する配列。
    Dim arr() As Variant
        Select Case ItemListBox.ColumnCount
            Case 1
                ItemListBox.ColumnCount = 4
                ItemListBox.ColumnWidths = ColumnWidth
                EnumButton.Enabled = False
            Case Else
                Exit Sub
        End Select
    
    ' (1)Enum (2) [_eLast] (3) End Enum を追加するため、
    ' Redim時の要素数を+3としている。
    ' (2)は、Enum内の要素数を得るためなどに使用する。
    ' 例. [_eLast] = 10 の場合、Enumは直前まで 0 ~ 9 で
    '   10個の要素を持つことになる。
    ' ※変数宣言と揃えるために、列方向の要素は0~3とする。
    ReDim arr(0 To ItemListBox.ListCount - 1 + 3, 3)
        arr(0, 0) = "Public "
        arr(0, 1) = "Enum " & EnumNameTextBox
    Dim i As Long
        For i = 1 To UBound(arr) - 2
            arr(i, 0) = Chr(9) & PrefixEnumCharacterTextBox.Value
            arr(i, 1) = ItemListBox.List(i - 1, 0)
        Next
        
        ' ↓今回追加↓
        If From1CheckBox.Value Then
            arr(1, 2) = "=1"
        End If
        ' ↑今回追加↑
        
        arr(i, 0) = Chr(9)
        arr(i, 1) = "[_eLast]"
        
        i = i + 1
        arr(i, 0) = "End "
        arr(i, 1) = "Enum"
               
        ItemListBox.List = arr
        CopyButton.Enabled = True
End Sub

EnumDefaultCheckBoxのクリックイベントがこちら。チェックの有無で、
既定値のセット/リセットを切り替えている。

' 本ツールの既定値をセットするチェックボックス。
' ※既定値は、ユーザーで任意に変更して構わない。
Private Sub EnumDefaultCheckBox_Click()
    Select Case EnumDefaultCheckBox.Value
        Case True
            EnumNameTextBox = "列名"
            PrefixEnumCharacterTextBox = "en"
            From1CheckBox.Value = True
        Case False
            EnumNameTextBox = vbNullString
            PrefixEnumCharacterTextBox = vbNullString
            From1CheckBox.Value = False
    End Select
End Sub

最後に、「編集内容を全て戻す」ボタンを押した際、
「本ツールの既定値をセット」チェックを外す処理を追加する。

' 選択範囲のラベル行をリストボックスにセット。
Private Sub ResetButton_Click()
    With ItemListBox
        .List = HeaderList
        .ColumnCount = 1
    End With
    
    NewNameTextBox.Value = vbNullString
    CopyButton.Enabled = False
    
    EnumDefaultCheckBox.Value = False   ' <--- 今回追加
    
End Sub
結果確認

それでは、実際に動作させて確認してみよう。
今回確認する内容は、以下のとおり。

  1. 本ツールの既定値を正しくセットできるか。
  2. 編集内容を全て戻すボタンで、1. が正しくリセットされるか。

上記の結果がこちら。
f:id:Infoment:20201110233448g:plain

今回も、想定した内容を実現することが出来た。

本シリーズ最終回まであと2,3回(適当)。次回に続きます。

参考まで。