O que a palavra-chave Set realmente faz no VBA?

Espero que seja uma pergunta fácil, mas eu gostaria muito de uma resposta técnica para isso!

Qual é a diferença entre:

i = 4 

e

 Set i = 4 

em VBA? Eu sei que o último vai lançar um erro, mas eu não entendo completamente o porquê.

set é usado para atribuir uma referência a um object. O equivalente C seria

  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) 

No seu caso, isso produzirá um erro. 🙂

Set atribui uma referência de object. Para todas as outras atribuições, a instrução Let (implícita, opcional e pouco usada) está correta:

 Set object = New SomeObject Set object = FunctionReturningAnObjectRef(SomeArgument) Let i = 0 Let i = FunctionReturningAValue(SomeArgument) ' or, more commonly ' i = 0 i = FunctionReturningAValue(SomeArgument) 

Do MSDN :

Definir Palavra-chave: No VBA, a palavra-chave Set é necessária para distinguir entre a atribuição de um object e a atribuição da propriedade padrão do object. Como as propriedades padrão não são suportadas no Visual Basic .NET, a palavra-chave Set não é necessária e não é mais suportada.

Set é usado para definir referências de objects, ao contrário de atribuir um valor.

No topo da minha cabeça, Set é usado para atribuir objects COM a variables. Ao fazer um conjunto, suspeito que, sob o capô, está fazendo uma chamada AddRef () no object para gerenciar sua vida útil.

Então, quando você quer definir um valor, não precisa de “Set”; caso contrário, se você estiver se referindo a um object, por exemplo, planilha / intervalo, etc., será necessário usar “Definir”.

Set é uma palavra-chave e é usada para atribuir uma referência a um object no VBA.

Por exemplo, * Abaixo, o exemplo mostra como usar o Set in VBA.

Dim WS como planilha

Definir WS = ActiveWorkbook.Worksheets (“Sheet1”)

WS.Name = “Amit”