Set anahtar kelimesi VBA'da gerçekte ne yapar?


Yanıtlar:


95

setbir nesneye başvuru atamak için kullanılır. C eşdeğeri

 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
Bir VB nesne başvurusu, C işaretçisi ile tam olarak aynı değildir. Ve VB'de "& i" eşdeğeri yoktur.
Tomalak

10
Tamamen aynı değil, hayır. Ama konsepti anlayabilecek kadar yakınım.
Treb

@Tomalak: VarPtr ()
Atmocreations

Bu iyi bir benzetme değil. Bu örneği (al VBA on the left | C on the right): Dim A, B As Range | Range A, B;. Analojinizle gitmek A = B | A = B;doğru olurdu (ve C Set A = B | A = &B;cinsinden olurdu), ama aslında VBA'da doğrudur (ve C'de başarısız olur). VBA'da A = Bve Set A = BC'lere İKİ eşdeğerdir A = B;! Ayrım başka bir yerde gerçekleşir.
Niko O

77

Sizin durumunuzda bir hata üretecektir. :-)

Setbir nesne başvurusu atar. Diğer tüm atamalar için (örtük, isteğe bağlı ve çok az kullanılan) Letifadesi doğrudur:

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

Gönderen MSDN :

Anahtar Kelimeyi Ayarla: VBA'da, Set nesnesini ve bir nesnenin varsayılan özelliğinin atanmasını ayırt etmek için Set anahtar sözcüğü gereklidir. Varsayılan özellikler Visual Basic .NET'te desteklenmediğinden, Set anahtar sözcüğü gerekmez ve artık desteklenmez.


İyi bulundu, ancak MSDN'de bulduğunuz makaleye bir bağlantı daha da iyi olurdu :)
Neil Barnwell

1
@Neil - yazımda MSDN'yi tıklatırsanız bağlantı oradadır.
Galwegian

2
MSDN'yi kopyalarken, en azından doğru makale. Bu, VBA'ya değil, VB.NET'e atıfta bulunuyor.
Tomalak

1
OP, VBA hakkında soruyor ve Set'teki bilgiler artık .NET'te kullanım için gerekli olmamasına rağmen, bu kapalı bir konu ve buraya Object variable or With block variable not setVBA hatasıyla gelen insanlar için yararlı değil :)
AJP

7
MSDN'den alıntı için çok teşekkür ederim. Diğer tüm cevaplar, hatta kabul edilen cevap bile eksik. 'set' tamamen VARSAYILAN MÜLKİYET ile ilgilidir. Sadece okumak stackoverflow.com/a/9924325/717732
Quetzalcoatl'ı

10

Set, değer atamak yerine nesne referanslarını ayarlamak için kullanılır.


1

Başımın en üstünde Set, değişkenlere COM nesneleri atamak için kullanılır. Bir Set yaparak kaputun altında, ömrünü yönetmek için nesneye bir AddRef () çağrısı yaptığından şüpheleniyorum.


1
Yalnızca COM nesneleri için değil, tüm nesneler için kullanılır. SET'i kullanmanızın ana nedeni Galce ile açıklanmaktadır.
Ikke

0

Dolayısıyla, bir değer ayarlamak istediğinizde "Ayarla" gerekmez; aksi takdirde, örneğin bir çalışma sayfası / aralık vb. gibi bir nesneye başvuruyorsanız, "Ayarla" seçeneğini kullanmanız gerekir.


-1

Set bir Anahtar Kelimedir ve VBA'daki bir Nesneye referans atamak için kullanılır.

Örneğin, * Aşağıdaki örnek Set'in VBA'da nasıl kullanılacağını göstermektedir.

Çalışma Sayfası Olarak Dim Dim

WS'yi ayarla = ActiveWorkbook.Worksheets ("Sayfa1")

WS.Name = "Amit"

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.