質問: 【excel vba】visual basic editorについて お世話になります。 excelで「visual basic editor」を開くと、 左側に下記が表示されます。 microsoft excel objects > sheet1、sheet2、sheet3、thisworkbook フォーム > userform1 標準モジュール > module1 クラス モジュール > class1 sheet1やuserform1、module1、class1にそれぞれコードを 入力できますが、違い、使い分けについて教えてほしいです。 どれにコードを書いていけばいいか分からず困っています。 よろしくお願いします。
回答: こんばんは。 一応、前のご質問からすると、「マクロの入門者」ですとなっていましたが、私も、入門時にはさっぱり分かりませんでしたね。 大きく別けると、三つに分かれると思います。 ・標準モジュール ・クラスモジュール ・ローカルモジュール(≒オブジェクトモジュール) (シート, userform, thisworkbook) となっています。 「標準モジュール」に書いておくと、ちょうど、家の中で、家族全員が集まるような居間で、そこで声を掛けると、一通り、どこにでも声が届くようになっています。つまり、どこか特定のオブジェクトに関連付けられておりません。個々のオブジェクト(シートやuserform)からでも、自由に取り出しが利きます。excelでは、基本的には、「標準モジュール」に書いてください。時々、シートモジュールなどに、ごちゃごちゃ書く人がいますが、それは間違いです。 「標準モジュール」に書けば、シートを転々と動かしても、その親オブジェクトは、指定しなければ、activesheet になっています。「ローカルモジュール」では、違う場所の場合は、シートなどを指定しなくてはなりません。そうしないとは、エラーが出ることが多いです。 そういう点で、「標準モジュール」は、ローカルに対して、「グローバル」だと思ってよいと思います。共通する定数や変数を置く場合も、そこに書きます。(厳密な意味での「グローバル」というのは、また違いますから、いずれ、あのとき、掲示板の回答者の言ったことはウソだったなんて思わないでください。「グローバル」というのは、本当に、どこからでも、ということになるのですが、一般的な方法では、同じブック内だけしか呼び出しが利かないと思ってください。) 「ローカルモジュール」は、その親オブジェクトが、シート(sheet1)だったり、userformだったりします。thisworkbook というのは、そのブック全体の入り口のような場所です。多くは、その親オブジェクト固有のコードが多く、イベント・ドリブン型と言って、オブジェクト自体を操作したときに起動することで動かすマクロのために使います。 userform も同じです。userform のそれぞれのコントロール(ボタンやテキストボックスなど)を動かすときに起動するマクロを書き込みます。 「クラスモジュール」は、それ自身が、固有のオブジェクトとなり、プロパティやメソッドを記述することが可能です。オブジェクトの設計図のような場所で、オブジェクトの動作をコントロールすることが出来ます。例えば、新しいブックを開いたときに、デフォルトをユーザーの思うような仕様にしたいというようなことも、機能的に許されれば可能です。 しかし、「クラスモジュール」は、excelでは多くは、上記のローカルモジュールと同じようなイベント・ドリブン型の、ユーザー設定したものを、コントロールに付け加えるときが多いです。