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


回答:


95

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)

5
VBオブジェクト参照は、Cポインターとまったく同じではありません。また、VBには「&i」に相当するものはありません。
Tomalak 2008

10
まったく同じではありません。しかし、私がその概念を理解するのに十分近い。
Treb

@Tomalak:VarPtr()を使用できます
Atmocreations 2009年

これは良いアナロジーではありません。(この例を見てみましょうVBA on the left | C on the right): Dim A, B As Range | Range A, B;。あなたの類推で行くと、A = B | A = B;正しいでしょう(そしてそれはCであるでしょう)が、Set A = B | A = &B;実際にはVBAで正しいです(そしてそれはCで失敗します)。VBAではA = BSet A = BCと同等A = B;です。区別はどこかで発生します。
Niko O

77

あなたの場合、それはエラーを生成します。:-)

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)

44

MSDNから:

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


よくわかりましたが、MSDNで見つけた記事へのリンクはさらに良いでしょう:)
Neil Barnwell

1
@ニール-投稿でMSDNをクリックするとリンクが表示されます。
08

2
MSDNをコピーするときは、少なくとも正しい記事です。これはVBではなくVB.NETを参照しています。
Tomalak 2008

1
OPはVBAについて尋ねています。.NETで使用するためにSetが不要になったという情報は役に立ちますがObject variable or With block variable not set、VBAからのエラーでここに到着した人には役に立ちません:)
AJP

7
MSDNからの抜粋をありがとうございました。他のすべての答えは、受け入れられたものでもポイントを逃しています。'set'はすべてDEFAULT PROPERTYに関するものです。stackoverflow.com/a/9924325/717732
quetzalcoatlを

10

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


1

頭の中で、SetはCOMオブジェクトを変数に割り当てるために使用されます。Setを実行することで、内部ではオブジェクトのAddRef()呼び出しを実行して、オブジェクトの寿命を管理しているのではないかと思います。


1
COMオブジェクトだけでなく、すべてのオブジェクトに使用されます。SETを使用する主な理由はガルウェジアンによって説明されます。
イッケ2008

0

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


-1

セットはキーワードであり、VBAのオブジェクトへの参照を割り当てるために使用されます。

たとえば、以下の例は、VBAでSetを使用する方法を示しています。

ワークシートとして薄暗いWS

WS = ActiveWorkbook.Worksheets( "Sheet1")を設定します

WS.Name = "Amit"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.