Espero que seja uma pergunta fácil, mas eu gostaria de uma resposta técnica para isso!
Qual é a diferença entre:
i = 4
e
Set i = 4
no VBA? Eu sei que o último lançará um erro, mas não entendo completamente o porquê.
Espero que seja uma pergunta fácil, mas eu gostaria de uma resposta técnica para isso!
Qual é a diferença entre:
i = 4
e
Set i = 4
no VBA? Eu sei que o último lançará um erro, mas não entendo completamente o porquê.
Respostas:
set
é usado para atribuir uma referência a um objeto. 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)
VBA on the left | C on the right
): Dim A, B As Range | Range A, B;
. Indo com sua analogia, A = B | A = B;
seria correto (e seria em C), mas Set A = B | A = &B;
na verdade é correto no VBA (e falharia em C). Em VBA, A = B
e Set A = B
são ambos equivalentes a C's A = B;
! A distinção acontece em outro lugar.
No seu caso, isso produzirá um erro. :-)
Set
atribui uma referência a objeto. Para todas as outras atribuições, a Let
instrução (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 Definir é necessária para distinguir entre a atribuição de um objeto e a atribuição da propriedade padrão do objeto. 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.
Object variable or With block variable not set
erro do VBA :)
Em cima da minha cabeça, Set é usado para atribuir objetos COM a variáveis. Ao fazer um Set, suspeito que, sob o capô, ele esteja fazendo uma chamada AddRef () no objeto para gerenciar sua vida útil.
Set é uma palavra-chave e é usado para atribuir uma referência a um objeto no VBA.
Por exemplo, * O exemplo abaixo mostra como usar o Set no VBA.
Dim Dim WS As Worksheet
Defina WS = ActiveWorkbook.Worksheets ("Sheet1")
WS.Name = "Amit"