Was macht das Schlüsselwort Set in VBA tatsächlich?


Antworten:


95

setwird verwendet, um einem Objekt einen Verweis zuzuweisen. Das C-Äquivalent wäre

 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
Eine VB-Objektreferenz ist nicht ganz dasselbe wie ein C-Zeiger. Und es gibt kein Äquivalent von "& i" in VB.
Tomalak

10
Nein ganz gleich, nein. Aber nah genug, um das Konzept zu verstehen.
Treb

@Tomalak: Sie könnten VarPtr ()
Atmocreations

Dies ist keine gute Analogie. Nehmen Sie dieses Beispiel ( VBA on the left | C on the right) : Dim A, B As Range | Range A, B;. Mit Ihrer Analogie zu gehen, A = B | A = B;wäre korrekt (und es wäre in C), ist aber Set A = B | A = &B;in VBA tatsächlich korrekt (und es würde in C fehlschlagen). In VBA A = Bund Set A = Bsind beide gleichbedeutend mit C A = B;! Die Unterscheidung erfolgt woanders.
Niko O

77

In Ihrem Fall wird ein Fehler ausgegeben. :-)

Setweist eine Objektreferenz zu. Für alle anderen Zuweisungen ist die (implizite, optionale und wenig verwendete) LetAnweisung korrekt:

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

Von MSDN :

Set-Schlüsselwort: In VBA ist das Set-Schlüsselwort erforderlich, um zwischen der Zuweisung eines Objekts und der Zuweisung der Standardeigenschaft des Objekts zu unterscheiden. Da Standardeigenschaften in Visual Basic .NET nicht unterstützt werden, wird das Schlüsselwort Set nicht benötigt und nicht mehr unterstützt.


Gut gefunden, aber ein Link zu dem Artikel, den Sie auf MSDN gefunden haben, wäre noch besser :)
Neil Barnwell

1
@Neil - der Link ist da, wenn Sie in meinem Beitrag auf MSDN klicken.
Galwegian

2
Wenn Sie den MSDN kopieren, dann mindestens den richtigen Artikel. Dieser bezieht sich auf VB.NET, nicht auf VBA.
Tomalak

1
OP fragt nach VBA, und obwohl die Informationen zu Set, die für die Verwendung in .NET nicht mehr erforderlich sind, nützlich sind, ist es ein Off-Topic und nicht hilfreich für Leute, die mit dem Object variable or With block variable not setFehler von VBA hierher kommen :)
AJP

7
Vielen Dank für den Auszug aus MSDN. Alle anderen Antworten, auch die akzeptierte, verfehlen den Punkt. 'set' dreht sich alles um das STANDARD-EIGENTUM. Lesen Sie einfach stackoverflow.com/a/9924325/717732
quetzalcoatl

10

Set wird zum Festlegen von Objektreferenzen verwendet, anstatt einen Wert zuzuweisen.


1

Set wird verwendet, um Variablen COM-Objekte zuzuweisen. Wenn ich ein Set mache, vermute ich, dass es unter der Haube einen AddRef () -Aufruf für das Objekt ausführt, um dessen Lebensdauer zu verwalten.


1
Es wird nicht nur für COM-Objekte verwendet, sondern für alle Objekte. Der Hauptgrund, warum Sie SET verwenden, wird von Galwegian erklärt.
Ikke

0

Wenn Sie also einen Wert festlegen möchten, benötigen Sie nicht "Festlegen". Andernfalls müssen Sie "Set" verwenden, wenn Sie sich auf ein Objekt beziehen, z. B. ein Arbeitsblatt / einen Bereich usw.


-1

Set ist ein Schlüsselwort und wird verwendet, um einem Objekt in VBA einen Verweis zuzuweisen.

Zum Beispiel zeigt * das folgende Beispiel, wie Set in VBA verwendet wird.

WS als Arbeitsblatt dimmen

Setze WS = ActiveWorkbook.Worksheets ("Sheet1")

WS.Name = "Amit"

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.