Miejmy nadzieję, że to łatwe pytanie, ale chciałbym uzyskać techniczną odpowiedź na to!
Jaka jest różnica pomiędzy:
i = 4
i
Set i = 4
w VBA? Wiem, że ten ostatni wyrzuci błąd, ale nie do końca rozumiem dlaczego.
Miejmy nadzieję, że to łatwe pytanie, ale chciałbym uzyskać techniczną odpowiedź na to!
Jaka jest różnica pomiędzy:
i = 4
i
Set i = 4
w VBA? Wiem, że ten ostatni wyrzuci błąd, ale nie do końca rozumiem dlaczego.
Odpowiedzi:
set
sł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)
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 = B
i Set A = B
OBA są odpowiednikami C A = B;
! To rozróżnienie dzieje się gdzie indziej.
W twoim przypadku spowoduje to błąd. :-)
Set
przypisuje odniesienie do obiektu. Dla wszystkich innych przypisań instrukcja (niejawna, opcjonalna i rzadko używana) Let
jest poprawna:
Set object = New SomeObject
Set object = FunctionReturningAnObjectRef(SomeArgument)
Let i = 0
Let i = FunctionReturningAValue(SomeArgument)
' or, more commonly '
i = 0
i = FunctionReturningAValue(SomeArgument)
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.
Object variable or With block variable not set
błędem z VBA :)
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.
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"