少ないコード量で、実務でも使えるかもしれないとクラスモジュールを感じていただくためにイベント処理を共通化するクラスの簡単なサンプルと、プロパティをPropertyプロシージャで実装する例をご紹介し、ステップ実行してみることをおすすめしました。
DataValidationクラスのProperty Get TargetSheetは呼ばれない
クラスを作ったことのない方でも、何度かステップ実行してみれば、DataValidationクラスの、
Property Get TargetSheet() As Excel.Worksheet
Set TargetSheet = targetSheet_
End Property
は、1度も呼び出されていないことに気付くのではないかと思います。
もしも気付かなかったのであれば、クラスモジュールに手を出すのはちょっと早いような気もします。
これがPropertyプロシージャを使ってプロパティを実装する例をご紹介した記事の中で、「このサンプルでGetが必要なのか、という意見もあると思いますけれど、これも別記事で。」と書いた件です。
設定はできるけれど取得できないプロパティ?
拙著『いちばんやさしいExcel VBAの教本』のLesson 49で、プロパティについて以下のように書きました。オブジェクトが持つ何らかのデータや、オブジェクトの要素を取得するコードを「プロパティ」といいます。
(途中省略)
一部のプロパティはデータを設定することもできます。
少なくともExcel VBAの世界では、プロパティはデータの取得が先行する役割で、一部のプロパティについては取得だけでなく設定もできるようになっています。
オブジェクトブラウザーでは、取得しかできないプロパティの場合には下図のように「読み取り専用」と明示されます。
設定はできるけれど取得できないプロパティはない
逆に、設定だけができて取得できないプロパティは、Excel VBAに存在しないはずです。
プロパティについて私はこのように理解しているため、Propertyプロシージャを使ったサンプルを作る際、Setしか使っていないのは当然わかっていますけれど、Getを持たない状態にかなりの違和感があり、使っていないGetも含んだコードをご紹介しました。
書き込み専用プロパティは使用しない
『超図解 VB.NETルールブック』という、コーディング規約を作るときに参考となる書籍があります。
この本に書かれている内容の全てに同意できるわけではありませんけれど、p.106「書き込み専用プロパティは使用しない」に以下のような記述があります。書き込み専用プロパティは使用しないでください。ユーザーにとってプロパティはパブリックフィールドと同じように扱えるという意識があります。書き込み専用プロパティはこの前提と矛盾します。
要は、設定だけができて取得のできないプロパティは作るなと、言っています。
最終更新日時:2020-04-21 17:04
- Newer:Shapes.AddChart2でグラフ位置を指定する
- Older:他の受講者との会話も刺激に
Home » エクセルマクロ・Excel VBAの使い方 » SetやLetができてGetのできないプロパティはアリなのか?