Co właściwie robi słowo kluczowe Set w VBA?


Odpowiedzi:


95

setsłuży do przypisania odniesienia do obiektu. Odpowiednik C byłby

 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
Odwołanie do obiektu VB nie jest tym samym, co wskaźnik w C. I nie ma odpowiednika „& i” w VB.
Tomalak

10
Nie całkiem to samo, nie. Ale wystarczająco blisko, abym zrozumiał tę koncepcję.
Treb

@Tomalak: Możesz użyć VarPtr ()
Atmocreations

To nie jest dobra analogia. Weźmy ten przykład ( VBA on the left | C on the right) Dim A, B As Range | Range A, B;. Idąc z twoją analogią, A = B | A = B;byłoby poprawne (i byłoby w C), ale w Set A = B | A = &B;rzeczywistości jest poprawne w VBA (i zawiodłoby w C). W VBA A = Bi Set A = BOBA są odpowiednikami C A = B;! To rozróżnienie dzieje się gdzie indziej.
Niko

77

W twoim przypadku spowoduje to błąd. :-)

Setprzypisuje odniesienie do obiektu. Dla wszystkich innych przypisań instrukcja (niejawna, opcjonalna i rzadko używana) Letjest poprawna:

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

Z MSDN :

Set Keyword: W VBA słowo kluczowe Set jest niezbędne do rozróżnienia między przypisaniem obiektu a przypisaniem domyślnej właściwości obiektu. Ponieważ właściwości domyślne nie są obsługiwane w języku Visual Basic .NET, słowo kluczowe Set nie jest potrzebne i nie jest już obsługiwane.


Dobrze znalezione, ale link do artykułu, który znalazłeś na MSDN byłby jeszcze lepszy :)
Neil Barnwell,

1
@Neil - link jest tam, jeśli klikniesz MSDN w moim poście.
Galwegian

2
Podczas kopiowania z MSDN, przynajmniej poprawny artykuł. Ten odnosi się do VB.NET, a nie do VBA.
Tomalak

1
OP pyta o VBA i chociaż informacja o tym, że Set nie jest już potrzebna do użytku w .NET, jest przydatna, to jest poza tematem i nie jest pomocna dla osób przyjeżdżających tutaj z Object variable or With block variable not setbłędem z VBA :)
AJP

7
Bardzo dziękuję za wyciąg z MSDN. Wszystkie inne odpowiedzi, nawet ta zaakceptowana, nie mają sensu. „zestaw” dotyczy WŁASNOŚCI DOMYŚLNEJ. Po prostu przeczytaj stackoverflow.com/a/9924325/717732
quetzalcoatl

10

Zestaw służy do ustawiania odniesień do obiektów, a nie do przypisywania wartości.


1

Z góry myślę, że Set służy do przypisywania obiektów COM do zmiennych. Robiąc Set, podejrzewam, że pod maską wykonuje wywołanie AddRef () na obiekcie, aby zarządzać jego okresem życia.


1
Jest używany nie tylko dla obiektów COM, ale dla wszystkich obiektów. Główny powód, dla którego używasz SET, został wyjaśniony przez Galwegian.
Ikke,

0

Więc kiedy chcesz ustawić wartość, nie potrzebujesz "Ustaw"; w przeciwnym razie, jeśli odnosisz się do obiektu, np. arkusza / zakresu itp., musisz użyć opcji „Ustaw”.


-1

Set jest słowem kluczowym i służy do przypisywania odniesienia do obiektu w VBA.

Na przykład * Poniższy przykład pokazuje, jak używać Set w VBA.

Dim WS As Arkusz

Ustaw WS = ActiveWorkbook.Worksheets („Sheet1”)

WS.Name = "Amit"

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.