Worksheetクラスを継承したクラスを作る(5)
過去記事はコチラから。
おなじみ、PoweredSheet
クラスに、Cells
プロパティとか、Columns
プロパティを実装するのがむつかしいなーと思っていたのだが、
コチラへのことりちゅん (id:Kotori-ChunChun)氏、およびid:imihito氏からのコメントにより、思いっきりチャクラが開いたのであった。
引数でもインデックスでもない
たとえば、Columns
プロパティ入力時の
コイツ。
これは、別にColumns
の引数入力を促しているのでもなく、インデックスの入力を促しているのでもなく、単純にRange
オブジェクトの_Default
を表示しているだけだったのだ。たぶん。(←調べろ。)
これは、Cells
の場合も同じだろう。
コードの修正
というわけで、実装済みのCells
、Columns
、両プロパティのコードを修正する。
PoweredSheet
クラスの関係部分のみ掲載する。
修正前 クラスモジュール PoweredSheet
'Module Level Variable' Private realSh As Worksheet 'Properties' Public Property Get Cells( _ Optional ByVal RowIndex As Variant, _ Optional ByVal ColumnIndex As Variant) As Range Dim ret As Range If IsMissing(RowIndex) And IsMissing(ColumnIndex) Then Set ret = realSh.Cells GoTo Finalizer End If If IsMissing(RowIndex) Then RowIndex = 1 Set ret = realSh.Cells(RowIndex, ColumnIndex) GoTo Finalizer End If If IsMissing(ColumnIndex) Then Set ret = realSh.Cells(RowIndex) End If Set ret = realSh.Cells(RowIndex, ColumnIndex) Finalizer: Set Cells = ret End Property Public Property Get Columns( _ Optional ByVal Index As Variant) As Range Dim ret As Range If IsMissing(Index) Then Set ret = realSh.Columns Else Set ret = realSh.Columns(Index) End If Set Columns = ret End Property
引数を受け取る形にしているが、そもそも元のCells
プロパティやColumns
プロパティに引数がない以上、実際の使い心地が元の両プロパティと異なってしまっている。
また、引数の省略チェックをかけている関係で、コードが異様に長くなっている。
心を入れ替えて書き直してみた。
修正後 クラスモジュール PoweredSheet
'Module Level Variable' Private realSh As Worksheet 'Properties' Public Property Get Cells() As Range Set Cells = realSh.Cells End Property Public Property Get Columns() As Range Set Columns = realSh.Columns End Property
何と、たったこれだけ。単純にラップしただけ。
おわりに
もちろん、これで十分なのである。しかも、使用感は(当り前のことだが)元祖両プロパティと全く同じなのである。わっはっは。
改めて、ことりちゅん (id:Kotori-ChunChun)さん、id:imihitoさん、
あざす!