GoogleやYouTubeなどでVBAを学んでいて、クラスモジュールに出くわしました。
私は持っていTracker Template
ます。
数日おきにレポートが送られてきます("Ice cream FG Inv.xlsm"
)
を理解しようとしているClass Modules
ときに、(トラッカーテンプレート内に)クラスモジュールを作成し、内のWBIceCreamFGINVxlsm
すべてのワークシートのコードネームを作成するテンプレートを見つけましたIce Cream FG Inv.xlsm Workbook
。
例:
Public Property Get wsinventory() As Worksheet
Set wsinventory = Workbook.Worksheets("Inventory")
End Property
私のモジュールでは、参照したいのですwsinventory
が、クラスモジュールを「呼び出す」方法を正確に理解していません。
両方のワークブックが開いています。
私は始めようとしました:
Dim Data As Variant
Data = wsinventory.Range("A1").CurrentRegion.Value (**Variable not Defined**)
それから私は試しました:
Dim wsinventory As Worksheets
With wsinventory
Dim Data As Variant
Data = .Range("A1").CurrentRegion.Value (**Object variable or With variable not set**)
End With
それでも使用する必要がありますか:
Dim DataSource As Workbook
Set DataSource = Workbooks("Ice Cream FG Inv.xlsm")
With DataSource.Worksheets("Inventory")
End With
もしそうなら、クラスモジュールを使用する理由は何でしょうか?
そのクラスのプロパティにアクセスする前に、クラスオブジェクトを作成する必要があります。
あなたがこのクラスを持っていると仮定して、それに名前を付けますTestClass
:
Private pwsinventory As Worksheet
Public Sub init()
Set pwsinventory = Worksheets("Inventory")
End Sub
Public Property Set wsinventory(lwsinventory As Worksheet)
Set pwsinventory = lwsinventory
End Property
Public Property Get wsinventory() As Worksheet
Set wsinventory = pwsinventory
End Property
次のようにプロパティを設定/取得できます。
Sub test()
Dim datacls As TestClass
Dim data As Worksheet
Set datacls = New TestClass
Set datacls.wsinventory = Worksheets("inventory")
Set data = datacls.wsinventory
Debug.Print data.Name
End Sub
ただし、これはちょっと奇妙なことであり、設定したくないプロパティがある場合(引数を渡す必要がある場合)は、開始関数を使用する必要があります。残念ながら、クラスオブジェクトの作成後にそのサブを手動で呼び出さずにこれを行う方法はありません。
Sub Test2()
Dim datacls As TestClass
Set datacls = New TestClass
datacls.init
Debug.Print datacls.wsinventory.Name
End Sub
私がクラスを使用する最も一般的なケースは、より良いコンテナーです。通常、同じクラスタイプの多くを配列/ディクショナリ内に格納するため、特に各インスタンスで同じ方法でデータを変更する必要がある場合は、何を呼び出しているかが明確になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加