- Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
471 :デフォルトの名無しさん[sage]:2016/10/15(土) 07:14:01.90 ID:PJeRYX3D - >>469
VBAのクラスはコンストラクタに引数を持たせることが出来ない。 よってファクトリークラスかメソッドか関数のような生成用の役割を持つものを用意して そこで生成後に以前生成した渡したい値を渡してやれば良いだろうう。 通常時、特定のゲッタ、セッタを参照させないようにしたいのであれば、 一つインターフェースを用意してそのインターフェースを介在して呼ばれたときは設定出来るように、 そうでないときは設定出来ないようにすれば、 そのインスタンスを生成したときの型であれば外部から隠蔽することが出来るんじゃないかな? まだ試してないから何とも言えないけどそれで行けそうな気がする。
|
- Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
473 :デフォルトの名無しさん[]:2016/10/15(土) 09:30:00.80 ID:PJeRYX3D - >>472
ちょっと説明が分かり辛いと思うからコードで書いておく '標準モジュール:Main Option Explicit Private Sub Main() Dim masterInstance As testClass Dim slaveInstance As testClass Dim factory As New TestFactory Set masterInstance = factory.GetMasterInstance masterInstance.PresentValue = 1 Set slaveInstance = factory.GetSlaveInstance(masterInstance) 'Call MsgBox(slaveInstance.InitialValue) 'Call MsgBox(slaveInstance.IinitialSetting_InitialValue) End Sub 'クラスモジュール(インターフェース):IinitialSetting Option Explicit Public Property Get InitialValue() As Long End Property Public Property Let InitialValue(ByVal value As Long) End Property Public Property Get PresentValue() As Long End Property Public Property Let PresentValue(ByVal value As Long) End Property
|
- Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
474 :デフォルトの名無しさん[]:2016/10/15(土) 09:30:52.68 ID:PJeRYX3D - 'クラスモジュール:TestClass
Option Explicit Implements IinitialSetting Dim m_InitialValue As Long Dim m_PresentValue As Long Private Property Get IinitialSetting_InitialValue() As Long IinitialSetting_InitialValue = m_InitialValue End Property Private Property Let IinitialSetting_InitialValue(ByVal value As Long) m_InitialValue = value End Property Private Property Get IinitialSetting_PresentValue() As Long IinitialSetting_PresentValue = PresentValue End Property Private Property Let IinitialSetting_PresentValue(ByVal value As Long) PresentValue = value End Property Public Property Get PresentValue() As Long PresentValue = m_PresentValue End Property Public Property Let PresentValue(ByVal value As Long) m_PresentValue = value End Property
|
- Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net
475 :デフォルトの名無しさん[]:2016/10/15(土) 09:38:39.02 ID:PJeRYX3D - 'クラスモジュール:TestFactory
Option Explicit Public Function GetMasterInstance() As testClass Dim masterInstance As IinitialSetting Set masterInstance = New testClass masterInstance.InitialValue = 0 masterInstance.PresentValue = 0 Set GetMasterInstance = masterInstance End Function Public Function GetSlaveInstance(ByRef masterInstance As testClass) As testClass Dim slaveInstance As IinitialSetting Set slaveInstance = New testClass slaveInstance.InitialValue = masterInstance.PresentValue End Function 標準モジュールのMain関数から実行する。 まずはトレースで動きを追ってみて欲しい。 MsgBoxが書いてあるコメントを外すとどちらも参照出来ずにコンパイルエラーと なることが確認できるはず。 所々にある変数のtestClass型宣言は、本当はTestClassとなるはずだったのに 変数名をtestClassとしたらなぜか削除しようがなにしようがtestClassとなってしまった。 そこはご愛嬌ってことで。
|