選択したチェックボックス(フォームコントロール)の名前を変更する
昨日は、何度も登場する似たようなプロシージャを纏めてみた。
infoment.hatenablog.com
今日は、選択したチェックボックス(フォームコントロール)の名前を変更することに挑戦する。
単純にチェックボックスの名前を変更するだけなら、あまり難しくない。
このような感じで、変更後の名前を指定するだけだ。
CheckBox.Name = 変更後の名前
ただし今回は、チェックボックスの名前をグループ化に利用しているため、グループ情報がある場合は、その部分を残さなければならない。
そこで、これを判別したうえで、名前を変更することにした。
まず、ユーザーフォームにテキストボックスとボタンを追加。
- テキストボックス NewNameInputButton
- コマンドボタン NameChangeButton
ユーザーフォーム(CBsEditForm)
Private Sub NameChangeButton_Click() Dim SelectedIndex As Long SelectedIndex = CBsListBox.ListIndex ' チェックボックス選択確認。 If SelectedIndex = -1 Then MsgBox "対象となるCheckBoxが未選択です。" Exit Sub End If Dim OldName As String OldName = CBs.Item(SelectedIndex + 1).Name ' 名前が既にグループ分けされているか否か確認するため、 ' 「_」で分割して配列化する。 Dim NameArray As Variant NameArray = Split(OldName, "_") Dim NewName As String ' 配列ならば、3つ目の値を置き換える。 ' 配列でないならば、すべて置き換える。 If UBound(NameArray) > 0 Then ReDim Preserve NameArray(0 To 2) NameArray(2) = NewNameInputBox.Value NewName = Join(NameArray, "_") Else NewName = NewNameInputBox.Value End If ' チェックボックスのキャプション変更。 CBs.Item(SelectedIndex + 1).Name = NewName ' 次の入力に備え、テキストボックスを初期化。 NewNameInputBox.Value = vbNullString ' キャプション変更を反映するために、リストボックスをリセット。 ResetCBsListBox ' どのチェックボックスが選ばれていたかを明示するため、改めて ' 対象をリストから選択。 CBsListBox.Selected(SelectedIndex) = True End Sub
テスト結果はこちら。
通常であれば、名前だけ変更するケースは少ないと思う。今回は、名前を空欄にしてチェック部分だけ利用する場合、グループ化すると同じ名前のチェックボックスが複数発生する現象が起きたため、追加した次第。
最終回まであと2回。明日に続きます。
参考まで。