Cosa fa effettivamente la parola chiave Set in VBA?


Risposte:


95

setviene utilizzato per assegnare un riferimento a un oggetto. L'equivalente C sarebbe

 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
Un riferimento a un oggetto VB non è esattamente lo stesso di un puntatore C. E non esiste un equivalente di "& i" in VB.
Tomalak,

10
Non è lo stesso, no. Ma abbastanza vicino per farmi capire il concetto.
Treb,

@Tomalak: potresti usare VarPtr ()
Atmocreations il

Questa non è una buona analogia. Prendete questo esempio ( VBA on the left | C on the right): Dim A, B As Range | Range A, B;. Andare con la tua analogia, A = B | A = B;sarebbe corretto (e sarebbe in C), ma in Set A = B | A = &B;realtà è corretto in VBA (e fallirebbe in C). In VBA, A = Be Set A = BSONO entrambi equivalenti a quelli di C A = B;! La distinzione accade altrove.
Niko O

77

Nel tuo caso, produrrà un errore. :-)

Setassegna un riferimento ad oggetto. Per tutte le altre assegnazioni l' Letistruzione (implicita, facoltativa e poco utilizzata) è corretta:

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

Da MSDN :

Imposta parola chiave: in VBA, la parola chiave Imposta è necessaria per distinguere tra assegnazione di un oggetto e assegnazione della proprietà predefinita dell'oggetto. Poiché le proprietà predefinite non sono supportate in Visual Basic .NET, la parola chiave Set non è necessaria e non è più supportata.


Ben trovato, ma un link all'articolo che hai trovato su MSDN sarebbe ancora meglio :)
Neil Barnwell,

1
@Neil: il link è disponibile se fai clic su MSDN nel mio post.
Galiziano

2
Quando si copia da MSDN, almeno l'articolo corretto. Questo si riferisce a VB.NET, non a VBA.
Tomalak,

1
OP chiede informazioni su VBA, e sebbene le informazioni su Set non siano più necessarie per l'uso in .NET siano utili, sono fuori tema e non utili per le persone che arrivano qui con l' Object variable or With block variable not seterrore da VBA :)
AJP

7
Grazie mille per l'estratto di MSDN. Tutte le altre risposte, anche quella accettata, mancano il punto. 'set' riguarda la PROPRIETÀ PREDEFINITA. Basta leggere stackoverflow.com/a/9924325/717732
quetzalcoatl

10

Set viene utilizzato per impostare i riferimenti agli oggetti, anziché assegnare un valore.


1

Dalla parte superiore della mia testa, Set viene utilizzato per assegnare oggetti COM alle variabili. Facendo un set ho il sospetto che sotto il cofano stia facendo una chiamata AddRef () sull'oggetto per gestirne la durata.


1
Non viene utilizzato solo per gli oggetti COM, ma per tutti gli oggetti. Il motivo principale per cui si utilizza SET è spiegato da Galwegian.
Ikke,

0

Quindi, quando si desidera impostare un valore, non è necessario "Imposta"; altrimenti, se ti riferisci a un oggetto, ad es. foglio di lavoro / intervallo ecc., devi utilizzare "Imposta".


-1

Set è una parola chiave e viene utilizzato per assegnare un riferimento a un oggetto in VBA.

Ad esempio, * L'esempio seguente mostra come utilizzare Set in VBA.

Dim WS come foglio di lavoro

Set WS = ActiveWorkbook.Worksheets ("Foglio1")

WS.Name = "Amit"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.