web-dev-qa-db-ja.com

Setキーワードは実際にVBAで何をしますか?

簡単な質問ですが、これに対する技術的な回答が欲しいのですが。

違いは何ですか:

i = 4

そして

Set i = 4

vBAで?後者がエラーをスローすることは知っていますが、その理由は完全にはわかりません。

146
Jon Artus

setは、オブジェクトへの参照を割り当てるために使用されます。 Cに相当するものは

 int i;
int* ref_i;

i = 4; // Assigning a value (in VBA: i = 4)
ref_i = &i; //assigning a reference (in VBA: set ref_i = i)
94
Treb

あなたの場合、エラーが発生します。 :-)

Setは、オブジェクト参照を割り当てます。他のすべての割り当ての場合、(暗黙的、オプション、およびほとんど使用されない)Letステートメントは正しいです。

Set object = New SomeObject
Set object = FunctionReturningAnObjectRef(SomeArgument)

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)
75
Tomalak

MSDN から:

Setキーワード:VBAでは、Setキーワードは、オブジェクトの割り当てとオブジェクトのデフォルトプロパティの割り当てを区別するために必要です。 Visual Basic .NETではデフォルトのプロパティがサポートされていないため、Setキーワードは不要になり、サポートされなくなりました。

43
Galwegian

Setは、値を割り当てるのではなく、オブジェクト参照を設定するために使用されます。

10
LeppyR64

頭の上のSetは、COMオブジェクトを変数に割り当てるために使用されます。 Setを実行することにより、内部ではオブジェクトのAddRef()呼び出しを実行して、その存続期間を管理していると考えられます。

1
Sean

したがって、値を設定する場合、「設定」は必要ありません。そうでなければ、オブジェクトを参照している場合、例えばワークシート/範囲など、「設定」を使用する必要があります。

0
Eric Wang