私はVBAクラスの使用を開始しました。私は常に、各クラスが "独立"、つまり、必要なものすべて(定数、関数など)を内部に持つようにコードを記述しようとしました。しかし、最近では、別のモジュールで公開関数を呼び出す代わりに、(同じプロジェクト内の)「外界」のコードをクラスの「自給自足」を維持するためにコピーしたので、このアプローチはコードの重複を招いています。 。VBAクラス内でグローバル定数、型および関数を使用するのは良い方法ですか?
いくつかのクラスを変更して、他のモジュールの関数、定数、型などにアクセスできるようにすることを検討していますが、私の中にはこれが良いとは言えないものがあります練習。小さな声が言っていることが間違っていると誰かに教えてもらえますか?より良いアプローチがありますか?
ありがとうございました。
更新:以前の詳細を提供していないため
私の謝罪。ここではサンプルコードです:
'-------------------------------------
'Module 1
'-------------------------------------
Public Const INITIAL_VALUE As String = "Start"
Public Const FINAL_VALUE As String = "End"
'more constants ...
Public Type SheetLoc
SheetName As String
SheetRow As Long
SheetColumn As Long
End Type
'more types ...
'-------------------------------------
'Module 2
'-------------------------------------
Public Function GetLocation(key As String) As SheetLoc
Dim myLoc As SheetLoc
'some codes here...
'
With myLoc
.SheetName = someValue
.SheetColumn = anotherValue
.SheetRow = stillAnotherValue
End With
GetLocation = myLoc
End Function
'more module functions
'-------------------------------------
'Class Module
'-------------------------------------
'some codes...
Public Sub SaveResults()
Dim currLoc As SheetLoc '<==== using a type defined outside of the class
'more declarations ....
'some codes here ....
If currentValue = INITIAL_VALUE Then '<=== referring to external constant
currLoc = GetLocation(someKey) '<=== calling an external function
ElseIf currentValue = FINAL_VALUE Then '<=== referring to an external constant
currLoc = GetLocation(anotherKey)
Else
currLoc = GetLocation(defaultKey)
End If
'populate data ...
'save results ...
End Sub
注コメントで「< ====」のコードは、クラスはクラスの外部で定義された型、関数、定数を使用します。これが良い習慣であるかどうか、あるいはより良い選択肢があるかどうか疑問に思うのです。私はカプセル化の概念を完全には得ていないと思う。
「これは良い方法ではないかもしれないと私に伝えてください」と理解するためのコード例をいくつか提供してください。 – shahkalpesh
http://www.cpearson.com/excel/classes.aspx – JMax
あなたは何かに対して良い練習を意味するかどうかを知っていいでしょう..これはあなた自身のためだけであり、あなたはそれを理解することができます、それは良い練習です... – gbianchi