Worksheetクラスを継承したクラスを作る(5)

Worksheetクラスを継承したクラスを作る(5)

過去記事はコチラから。

おなじみ、PoweredSheetクラスに、Cellsプロパティとか、Columnsプロパティを実装するのがむつかしいなーと思っていたのだが、

akashi-keirin.hatenablog.com

コチラへのことりちゅん (id:Kotori-ChunChun)氏、およびid:imihito氏からのコメントにより、思いっきりチャクラが開いたのであった。

引数でもインデックスでもない

たとえば、Columnsプロパティ入力時の

f:id:akashi_keirin:20191005150939j:plain

コイツ。

これは、別にColumnsの引数入力を促しているのでもなく、インデックスの入力を促しているのでもなく、単純にRangeオブジェクトの_Defaultを表示しているだけだったのだ。たぶん。(←調べろ。)

これは、Cellsの場合も同じだろう。

コードの修正

というわけで、実装済みのCellsColumns、両プロパティのコードを修正する。

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

何と、たったこれだけ。単純にラップしただけ。

おわりに

もちろん、これで十分なのである。しかも、使用感は(当り前のことだが)元祖両プロパティと全く同じなのである。わっはっは。

f:id:akashi_keirin:20191005150941g:plain

改めて、ことりちゅん (id:Kotori-ChunChun)さん、id:imihitoさん、

あざす!

続きはコチラ

akashi-keirin.hatenablog.com

akashi-keirin.hatenablog.com