エクセルのvbaで1つのCSVデータを基に、「営業所別」「営業別」、「得意先別」,etc
の帳票を出力する処理を組もうかと考えています。
この案件にあたり、今までのmoduleのみの手続き型での実装から、オブジェクト指向での
プログラムをやってみようと思い立ちました。
いくつかサイトを参考にして作ろうとしているのですが、クラスの生成から
つまずいてしまっています。
クラスにworksheetオブジェクトを持たせたいのですが、下記のエラーが出ます。
「コンパイルエラー:
オブジェクトモジュールにはインターフェース'WS'用の'absClass'が必要です」
string型などでは上手くいったので、オブジェクトを持たせる場合に何か方法があるのかと思いますが、ググっても上手く出てきませんでした。
最悪、シート名だけ持たせてmodule側で処理してもいいのですが、他に便利な方法があれば試してみたいです。
vba
1'スーパークラス:absClass.cls 2 3Option Explicit 4 5'プロパティ 6Public WS As Worksheet 7 8Public Sub msgName(vdata As Worksheet) 9End Sub
vba
1'サブクラス:centerToMonth.cls 2 3Option Explicit 4'---コンパイルエラー: 5'---オブジェクトモジュールにはインターフェース'WS'用の'absClass'が必要です。 6Implements absClass 7 8'プロパティ 9Private WS As Worksheet 10 11Private Property Get absClass_WS() As WorkSheet 12 absClass_WS = WS 13End Property 14Private Property Let absClass_WS(ByVal RHS As WorkSheet) 15 WS = RHS 16End Property 17 18Private Sub absClass_msgName(vdata As Worksheet) 19 Debug.Print vdata.name 20End Sub
vba
1'module.bas 2 3Sub test() 4 Dim objabs As absClass 5 Dim objcon As centerToMonth 6 7 Set objcon = New centerToMonth 8 Set objabs = objcon 9 10 With objabs 11 MsgBox .WS 12 13 'MsgBox ActiveWorkbook.Worksheets("営業所別売上修正一覧表(月間)").name 14 .WS = ActiveWorkbook.Worksheets("営業所別売上修正一覧表(月間)") 15 .msgName 16 End With 17End Sub
参考:https://sites.google.com/site/compositiosystemae/home/vbaworld/upper/interface
以上、ご教授いただければと思います。
よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/16 08:36