#775 複製したコントロールを別の連番付きの名前に変更する方法 フォーム、VBA

フォームのデザインにおいて連番を振ったコントロールがあるとき、たとえば「txt日付1」・「txt日付2」・「txt日付3」・・・・のような名前が付けられているとき、それらをまとめて複製すると「テキストボックス40」・「テキストボックス41」・「テキストボックス42」・・・・のような名前になります。テキストボックスコントロールであれば「”テキストボックス”+連番」といった名前になり、複製元の”txt”や”日付”の部分などは残りません。・・・・ここでの”連番”は、最後にデザインビューに挿入されたコントロールの番号の次から始まります

そのようなとき、フォームのデザインビューに対してプログラムを実行することで、複製したコントロールを別の連番付きの名前に変更することができます。

次のプログラム例では、フォーム「複製コントロール連番変更」において、「テキストボックス12」・「テキストボックス13」〜〜〜「テキストボックス23」となっている複製されたコントロールの名前を「txt1月」・「txt2月」〜〜〜「txt12月」に変更します。
  • 元のコントロールの開始番号は不定ですので、「12」から始まっていることはデザインビューのプロパティシートで調べてコードに記述する必要があります。
  • コントロールの名前はVBAでは「Name」プロパティで取得・設定します。
  • 下記では参考として「ControlSource/コントロールソース」プロパティも「出荷1月」〜〜〜のようにいっしょに変更しています。

Dim ctl As Control
Dim intNewNumber As Integer
Dim strNewName As String
Dim iintLoop As Integer

With Forms!複製コントロール連番変更
  '連番の初期値を設定
  intNewNumber = 1

  '複製したコントロールのループ
  For iintLoop = 12 To 23   'いくつからいくつになるかはフォームデザインで調べる
    'コントロールの名前を変更
    strNewName = "txt" & intNewNumber & "月"
    .Controls("テキスト" & iintLoop).Name = strNewName

    'コントロールソースを変更
    .Controls(strNewName).ControlSource = "出荷" & intNewNumber & "月"

    '連番を次へ進める
    intNewNumber = intNewNumber + 1

  Next iintLoop

End With

実行例:


| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved