|
▼HIRO さん:
おはようございます。
> With UF1
> .T1-----
> .T2-----
> .T3-----
> End With
>と言うように書いているのですが、With 以下が多くなってくると
>同じことを書いているのが多くなるのでまとめることが出来ないかと
>思っております。変数を使ってみましたが、上手くできませんでした。
まず、これ、↑実際にどのように変数を使ってうまくいかなかったのか
記述するようにしてください。
直接のご質問内容に関しては、
frmLBにあるデータを移行するコントロールが10個程度なら、
Dim mycont As Variant
Private Sub UserForm_Initialize()
mycont = Array(ComboBox1, ComboBox2, ListBox1)
’これは、3個の例ですが、10個でも同様です。
End Sub
'等と配列に格納すれば、
For idx = 0 To 2
UF1.Controls("T" & idx + 1).Text = mycont(idx).Text
Next
こんなコードでよいと思います。
他には、frmLB内のコントロール名の命名を工夫するという方法です。
上記の例の
Combobox1 ---- FCtrl1
Combobox2 ---- FCtrl2
Listbox1 ----- FCtrl3
というオブジェクト名にします。
そうすると、
For idx = 1 To 3
UF1.Controls("T" & idx).Text = Controls("FCtrl" & idx).Text
Next
でOKですが・・・。
これは、検討していただくとして・・・。
ご質問を拝見して、
> With 以下が多くなってくると
>同じことを書いているのが多くなるのでまとめることが出来ないかと
>思っております。
これ、With以下だけでなく、場合によっては
UF1、UF2と処理を分けずに記述できそうなんです。
(そうしないと将来、例えばUF3、UF4、UF5なんて出てきた場合、
似たようなコードの記述を繰り返すことになりますよね?)
又、はっきりとは判断できませんが、
そもそもUF1、UF2とユーザーフォームを二つ用意する必要があるのか
という疑問もあります。
状況説明を詳細に記述すれば、
この辺りもすっきりするかもしれませんよ!!
|
|