簡単な質問ですが、これに対する技術的な回答が欲しいのですが。
違いは何ですか:
i = 4
そして
Set i = 4
vBAで?後者がエラーをスローすることは知っていますが、その理由は完全にはわかりません。
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)
あなたの場合、エラーが発生します。 :-)
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)
MSDN から:
Setキーワード:VBAでは、Setキーワードは、オブジェクトの割り当てとオブジェクトのデフォルトプロパティの割り当てを区別するために必要です。 Visual Basic .NETではデフォルトのプロパティがサポートされていないため、Setキーワードは不要になり、サポートされなくなりました。
Setは、値を割り当てるのではなく、オブジェクト参照を設定するために使用されます。
頭の上のSetは、COMオブジェクトを変数に割り当てるために使用されます。 Setを実行することにより、内部ではオブジェクトのAddRef()呼び出しを実行して、その存続期間を管理していると考えられます。
したがって、値を設定する場合、「設定」は必要ありません。そうでなければ、オブジェクトを参照している場合、例えばワークシート/範囲など、「設定」を使用する必要があります。