Typeよりデータクラスの方が処理も含めて固まりにできる。
しかし、前回時点ではデータクラス間のコピーができなかった。今回はそれを解消する。

元ページはこちら

まず、標準モジュールでTypeをPublicで定義する。つまりクラスモジュールから出すのだ。
Public Type typeShohin
sCD As String
sName As String
lTanka As Long
dCreateDate As Date
End Type

次に、クラスモジュールに以下の処理を追記する。クラス内のTypeの定義のProperty Get と Let を作成する。

Public Property Let LocalType(typVal As typeShohin)
typ = typVal
End Property

Public Property Get LocalType() As typeShohin
LocalType = typ
End Property

最後に、元のモジュールでコメントで消した部分を次のように書き換える。

    typOut.LocalType = typIn.LocalType

これでTypeを拡張したデータクラスが作成できる。

このデータクラスだが、
・モジュール内だけのワーク
・モジュール間の共有
・データベースなど外部ファイルとのやりとり

で更なるアレンジがあった方がいいように思う。

データクラスは処理のフローでいえば枝葉の部類といえるだろう。処理が細かいものの、上位モジュールから使い勝手がよく、万一処理を追いたくなってもすぐに追い切れるくらいの内容にしておくとラクになる。
誤解がないように補足するが、データの入出力は処理の幹にあたる。しかし、取り込んだデータをどのように保持するかは枝葉である。

こんなクラスを手書きでいちいち作っているのも面倒だし間違いも多くなるので、Typeの定義からデータクラスを作成するツールも考えている。