■最後に・・・フォームコントロールの利点■
フォームコントロールは、その最大の特性である”マクロの登録”を生かせば、
独自の使い方ができます。つまり、登録するマクロは自分で選択できるのですから、
いくつもボタンやリストボックスなどがあり、どれも同じような処理を行うのであれば、
1つだけ作成したマクロを対象となるフォームコントロールすべてに登録すればよいのです。
この際、VBA入門者の方であれば、ぜひともCallerプロパティーの使用法をおさえておいて
ください。Callerは簡単にいえば”呼び出し元”をあらわすプロパティーですが、例えば
複数のリストボックスに登録したマクロのなかで・・・
---------------------------------------------------------------------------------
Sub MyProc()
With ActiveSheet.DropDowns(Application.Caller)
ActiveSheet.Cells(1,1).Value = .List(.ListIndex)
End With
End Sub
---------------------------------------------------------------------------------
のようにすると、マクロ登録したどのリストボックスの値が変化したときでも、
変化したリストボックスの値をひとつのプロシージャ内で取得することができます。
また、ActiveSheetを指定するか、ボタンやリストボックスのParentプロパティーを
使用することで配置されたシート上で転記処理などが可能となりますので、同じコードを
いくつも記述したり、標準モジュールのプロシージャをクリックイベントから呼び出したり、
などということをする必要はありません。
次の例では、ボタンクリックされた次のシートのセルA1に、呼び出しもとのシート名と
ボタン名を書き込みます。
---------------------------------------------------------------------------------
Sub MyProc2()
With ActiveSheet.Buttons(Application.Caller).Parent
.Next.Cells(1, 1).Value = .Name & "の" _
& Application.Caller & "から書きこまれました"
End With
End Sub
---------------------------------------------------------------------------------
※上記サンプルの中でNextプロパティーはボタンのParentのNext、つまり配置された
シートの次のシートをあらわします
以上、フォームコントロールはコントロールツールボックスのようなイベント処理が
できない反面、利用の仕方次第では独自の使い方があることがおわかりになったのでは
ないでしょうか?
もっとも、ボタンとしての役割にに限っていえば、オートシェープなどでもマクロの
登録はできますので、フォームコントロールのボタンにこだわる必要はありません。
柔軟な発想で、コントロールツールボックスのコントロールと機能を見比べ、どちらを
使えばより簡潔なコーディングができるかを考えてみるようにしてみてください。
|