vbaでの継承について、質問をさせて頂きます。
javaのようにスーパークラスにメンバ変数を設定し、それのアクセスをしたいのですが毎回インターフェースを設定する必要があるのでしょうか?
###理想
vba
1'スーパークラス:absClass.cls 2Option Explicit 3 4'プロパティ 5Private WS As Worksheet 6Private wsName As String 7Private startCol As Integer 8Private startRow As Integer 9 10Public Sub calc() 11End Sub
vba
1'サブクラス:centerToMonth.cls 2Option Explicit 3Implements absClass 4 5Private Sub Class_Initialize() 6 '初期値宣言 7 wsName = "営業所別_月間" 8 startCol = 3 9 startRow = 6 10 Set WS = ActiveWorkbook.Worksheets(wsName) 11End Sub 12 13Private Sub absClass_calc() 14 '計算処理 15End Sub 16 17Private sub hoge() 18End Sub
###現実?
vba
1 2'スーパークラス:absClass.cls 3Option Explicit 4 5'プロパティ 6'Public WS As Worksheet 7'Public wsName As String 8'Public startCol As Integer 9'Public startRow As Integer 10'Public colLen As Integer 11 12'' プロパティのインターフェイスを用意する。 13Public Property Get WS() As Worksheet 14End Property 15Public Property Get wsName() As String 16End Property 17Public Property Get startCol() As Integer 18End Property 19Public Property Get startRow() As Integer 20End Property 21 22Public Sub calc() 23End Sub 24
vba
1'サブクラス:centerToMonth.cls 2 3Option Explicit 4Implements absClass 5 6'プロパティ 7'【質問点】何故サブクラスで宣言するのでしょうか? 8Private WS As Worksheet 9Private wsName As String 10Private startCol As Integer 11Private startRow As Integer 12 13'メンバー設定 14Public Property Get absClass_WS() As Worksheet 15 Set absClass_WS = WS 16End Property 17Private Property Get absClass_wsName() As String 18 'absClass_wsName = wsName 19 absClass_wsName = "営業所別_月間" 20End Property 21Private Property Get absClass_startCol() As Integer 22 absClass_startCol = startCol 23End Property 24Private Property Get absClass_startRow() As Integer 25 absClass_startRow = startRow 26End Property 27 28 29Private Sub Class_Initialize() 30 '【質問点】定数を設定する場合はInitializeでするのが一般的でしょうか? 31 ' それともgetterでするのがよいのでしょうか? 32 '初期値宣言 33 wsName = "営業所別_月間" 34 startCol = 3 35 startRow = 6 36 Set WS = ActiveWorkbook.Worksheets(wsName) 37End Sub 38 39Private Sub absClass_calc() 40 '計算処理 41End Sub 42 43Private sub hoge() 44End Sub
http://teratail.com/questions/88452[前回の質問の続きです。]
【質問点まとめ】
0. メンバ変数の宣言は何故サブクラスで行うのでしょうか?
0. メンバ変数を宣言するのに、毎回インターフェース(setter, getter)を設定する必要があるのでしょうか?
また、よろしければ皆さんならばこうしているという例文などをいただけると非常に助かります。
オブジェクト指向も学習中で突飛な質問かもしれませんがよろしくお願い致します。
###【(追記)やりたいこと】
###スーパークラス
0. 単月系シート処理用
0. 年間系シート処理用
###サブクラス
0. 事業所一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所別営業一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別得意先一覧_月間シート処理(単月系シート処理用を継承)
0. 営業別外注一覧_月間シート処理(単月系シート処理用を継承)
0. 事業所一覧_年間シート処理(年間系シート処理用を継承)
0. 事業所別営業一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別得意先一覧_年間シート処理(年間系シート処理用を継承)
0. 営業別外注一覧_年間シート処理(年間系シート処理用を継承)

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/17 06:08
2017/08/17 06:29
2017/08/17 06:37 編集
2017/08/17 10:10
2017/08/17 10:28 編集
2017/08/17 10:58