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


Respostas:


95

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)

5
Uma referência de objeto VB não é exatamente a mesma que um ponteiro C. E não há equivalente a "& i" no VB.
Tomalak

10
Não é exatamente o mesmo, não. Mas perto o suficiente para eu entender o conceito.
8238 Treb

@Tomalak: Você poderia usar VarPtr ()
Atmocreations

Esta não é uma boa analogia. Veja este exemplo ( 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 = Be Set A = Bsão ambos equivalentes a C's A = B;! A distinção acontece em outro lugar.
Niko O

77

No seu caso, isso produzirá um erro. :-)

Setatribui uma referência a objeto. Para todas as outras atribuições, a Letinstruçã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)

44

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.


Bem encontrado, mas um link para o artigo que você encontrou no MSDN seria ainda melhor :)
Neil Barnwell

1
@ Neil - o link está lá se você clicar em MSDN no meu post.
#

2
Ao copiar o MSDN, pelo menos o artigo correto. Este se refere ao VB.NET, não ao VBA.
Tomalak

1
OP é perguntando sobre VBA, e embora a informação em ser mais necessário para o uso Situado no .NET é útil, é um fora do tópico e não é útil para pessoas que chegam aqui com o Object variable or With block variable not seterro do VBA :)
AJP

7
Muito obrigado pela extração do MSDN. Todas as outras respostas, mesmo as aceitas, estão faltando. 'set' é sobre PROPRIEDADE PADRÃO. Basta ler stackoverflow.com/a/9924325/717732
quetzalcoatl

10

Set é usado para definir referências de objetos, em vez de atribuir um valor.


1

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.


1
Não é usado apenas para objetos COM, mas para todos os objetos. O principal motivo pelo qual você usa o SET é explicado pelo Galwegian.
Ikke

0

Então, quando você deseja definir um valor, não precisa de "Set"; caso contrário, se você estiver se referindo a um objeto, por exemplo, planilha / intervalo etc., precisará usar "Definir".


-1

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"

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.