HOME > 即効テクニック > Excel VBA > その他関連のテクニック > VBA入門者の”どっち?”・・・フォームツールバー or コントロールツールボックス(2)

即効テクニック

その他関連のテクニック

VBA入門者の”どっち?”・・・フォームツールバー or コントロールツールボックス(2)

(Excel 97/2000)

■最後に・・・フォームコントロールの利点■

フォームコントロールは、その最大の特性である”マクロの登録”を生かせば、独自の使い方ができます。
つまり、登録するマクロは自分で選択できるのですから、いくつもボタンやリストボックスなどがあり、どれも同じような処理を行うのであれば、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、つまり配置されたシートの次のシートをあらわします

以上、フォームコントロールはコントロールツールボックスのようなイベント処理ができない反面、利用の仕方次第では独自の使い方があることがおわかりになったのではないでしょうか?
もっとも、ボタンとしての役割にに限っていえば、オートシェープなどでもマクロの登録はできますので、フォームコントロールのボタンにこだわる必要はありません。
柔軟な発想で、コントロールツールボックスのコントロールと機能を見比べ、どちらを使えばより簡潔なコーディングができるかを考えてみるようにしてみてください。