トップページ > プログラム > 2016年10月15日 > PJeRYX3D

書き込み順位&時間帯一覧

13 位/217 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000103000000000000004



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Excel VBA 質問スレ Part43 [無断転載禁止]©2ch.net

書き込みレス一覧

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となってしまった。
そこはご愛嬌ってことで。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。