【 擬似からの脱却 】 [ Breakthrough in the Pseudo-Control
Arrays ]
[ clsBpca の 軌跡 ] [ 前頁 , 次頁 , §1 , §2 , §3 , §4 , §5 , §6 , §7 , §8 , §9 , §10 , §11 , §12 ]
[ 汎用クラス , トグルラベル クラス , Focus クラス , クラス アドイン , カレンダークラス ] [ 質問はメール へ ]
====================================================================
§2 Controls コレクション の利用
====================================================================
(前節より‥‥‥)
これでは、コーディング量が増えるばかりで、全く効率的ではありませんね 。 ┐('〜`;)┌
そこで、VBAの場合に広く用いられているのが
【 Controls コレクション 】
というものを利用する方法です。 φ(..) メモメモ
Controls コレクションによる オブジェクト参照 は
[ object . ] Controls("オブジェクトの名前 ")
という風に 『括弧内に【文字列】でオブジェクト名を記述する 』 という方法で行ないます。
object には、参照しようとしているコントロールが載っている[UserForm オブジェクト]名を記
述します。自分自身の Userform モジュール内で記述しているコードならば、代わりに
と、Me キーワードで置き換えても構いません( object を省略した場合は、Me が指定された
ものと解釈されます)。
(補) UserForm の他に、[ Frame , MultiPage ] といったコントロールも、object の部分に記述
できます。これらの3つ は、特に 『 コンテナ
』 と呼ばれる種類のコントロールです。
今回の例ならば、Controls を使った書き方は
Controls("cmdSun").BackColor = vbRed
Controls("cmdMon").BackColor = vbRed
といったものになります。
ただし、このままでは、先程と何ら変わりませんので、先ずコマンドボタンの名前を「代表名 + 通番」
というパターンに統一して変更します。
cmdSun → cmdWeek1
cmdMon → cmdWeek2
:
cmdSat → cmdWeek7
そうすれば、最後の「通番」の部分を変数にする事で
という書き方ができます。これで、ループ処理等にも載せる事が可能になり、よりコーディングを簡
素化できます。
Dim No As Integer
For No = 1 To 7
Controls("cmdWeek" & No ).BackColor = vbRed
Next No
これで、7つのボタンへのアクセスを【ひとつにまとめる】コーディングが出来るようになりました
ので、先程のものを Controls コレクションを利用して手直ししてみます。先程のイベントプロシ
ジャーについては、下記の共通サブルーチン
Private Sub cmdWeek_Click_Sub(ByVal Index As Integer)
Dim vntWeekName As Variant
' Array関数のインデックスはゼロから始まるので、1から対応付けするには、
' 先頭に[空文字]要素をひとつ追加します
vntWeekName = Array("" , "日 ", "月 ", "火 ",
"水 ", "木 ", "金 ", "土 ")
MsgBox vntWeekName(Index ) & "曜日ボタンがクリックされました(" & Index & ")"
If (Controls("cmdWeek" & Index ).BackColor = vbButtonFace) Then
Controls("cmdWeek" & Index ).BackColor = vbRed
Else
Controls("cmdWeek" & Index ).BackColor = vbButtonFace
End If
End Sub
を用意してやると、
Private Sub cmdWeek1 _Click()
Call cmdWeek_Click_Sub (1 )
End Sub
Private Sub cmdWeek2 _Click()
Call cmdWeek_Click_Sub (2 )
End Sub
:
:
Private Sub cmdWeek7 _Click()
Call cmdWeek_Click_Sub (7 )
End Sub
という風にコーディング量が格段に少なくなります。 o(^o^)o
でも、[ cmdSun ] [ cmdMon ] ‥‥という名前の方が良いんだけど、それは無理なの?
(;_;)
====================================================================
次節 : §3 コレクション オブジェクトの利用
====================================================================
[ 前頁 , 次頁 , §1 , §2 , §3 , §4 , §5 , §6 , §7 , §8 , §9 , §10 , §11 , §12 ]
[ 汎用クラス , トグルラベル クラス , Focus クラス , クラス アドイン , カレンダークラス ] [ 質問はメール へ ]
[ Home へ戻る ]
角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2004 Allrights Reserved.