Excel の VBA には、オブジェクト修飾子なしで使用できるプロパティがいくつかあります。たとえば、オブジェクト修飾子なしでプロパティ ActiveCell を使用すると、Application オブジェクトで使用したかのようになります。一般に、オブジェクト修飾子を指定しない場合、プロパティが呼び出されるオブジェクトはどのように決定されるのでしょうか? たとえば、自分のクラスで同様のことを行うことはできますか? オブジェクト修飾子なしで呼び出すことができるプロパティを自分のクラスで宣言できますか?
1 に答える
Application
VBA では、モジュールまたはクラスは、次にそれがアタッチされているオブジェクト ( userform
、worksheet
、またはThisWorkbook
)、それ自体から継承されると見なされます。また、プロシージャ名が明確な場合は、通常、使用時に修飾する必要はありません。
クラスまたはモジュールにメソッドも含まれていない限り、Application.ActiveCell
単に として参照できます。その場合は、 で修飾する必要があります。ActiveCell
ActiveCell
Application.
これはまたMyProc
、 のメンバーとしてを持っている場合、別のコード/モジュール ファイルから単にとしてMyModule
参照できることを意味します。そうしないと、あいまいであるというエラーが発生します。つまり、またはに修飾する必要があります。MyProc
MyProc
MyOtherModule
MyProc
MyModule.MyProc
MyModule
MyOtherModule.MyProc
MyOtherModule
MyModule.MyProc
MyOtherModule.MyProc
でも...
クラス モジュールは、クラスの内部動作を定義します。クラスは、 で使用する前にインスタンス化する必要がありますNew
。クラスのプロパティは、クラスの特定のインスタンスを参照するため、参照先のインスタンスで常に修飾する必要があります。MyClass
つまり、文字列プロパティを持つクラスがある場合、インスタンスを介しMyProperty
て呼び出す必要があります。MyProperty
Set MyClassInstance = New MyClass
Debug.Print MyClassInstance.MyProperty()
あるいは:
Debug.Print (New MyClass).MyProperty()
With
クラス インスタンスの名前を入力しないようにする唯一の方法は、ブロックを宣言することです。
Set MyClassInstance = New MyClass
With MyClassInstance
Debug.Print .MyProperty()
End With