Apa yang sebenarnya dilakukan oleh Set Kata Kunci di VBA?


Jawaban:


95

setdigunakan untuk menetapkan referensi ke suatu objek. Setara C akan menjadi

 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
Referensi objek VB tidak cukup sama dengan pointer C. Dan tidak ada yang setara dengan "& i" di VB.
Tomalak

10
Tidak persis sama, tidak. Tetapi cukup dekat bagi saya untuk memahami konsepnya.
Treb

@ Tomalak: Anda bisa menggunakan VarPtr ()
Atmocreations

Ini bukan analogi yang baik. Ambil contoh ini ( VBA on the left | C on the right): Dim A, B As Range | Range A, B;. Pergi dengan analogi Anda, A = B | A = B;akan benar (dan itu akan di C), tetapi Set A = B | A = &B;sebenarnya benar di VBA (dan itu akan gagal di C). Dalam VBA, A = Bdan Set A = BKEDUA setara dengan C's A = B;! Perbedaannya terjadi di tempat lain.
Niko O

77

Dalam kasus Anda, itu akan menghasilkan kesalahan. :-)

Setmemberikan referensi objek. Untuk semua tugas lain, pernyataan (tersirat, opsional, dan sedikit digunakan) Letbenar:

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

Dari MSDN :

Atur Kata Kunci: Di VBA, kata kunci Set diperlukan untuk membedakan antara penetapan objek dan penetapan properti default objek. Karena properti default tidak didukung dalam Visual Basic .NET, kata kunci yang ditetapkan tidak diperlukan dan tidak lagi didukung.


Ditemukan dengan baik, tetapi tautan ke artikel yang Anda temukan di MSDN akan lebih baik :)
Neil Barnwell

1
@Neil - tautannya ada jika Anda mengklik MSDN di posting saya.
Galwegia

2
Saat menyalin MSDN, maka setidaknya artikel yang benar. Yang ini mengacu pada VB.NET, bukan ke VBA.
Tomalak

1
OP bertanya tentang VBA, dan meskipun info tentang Set tidak lagi diperlukan untuk digunakan dalam. NET bermanfaat, ini adalah topik yang tidak umum dan tidak membantu bagi orang yang datang ke sini dengan Object variable or With block variable not setkesalahan dari VBA :)
AJP

7
Terima kasih banyak untuk ekstrak dari MSDN. Semua jawaban lain, bahkan yang diterima pun tidak ada gunanya. 'set' adalah tentang PROPERTI DEFAULT. Baru saja membaca stackoverflow.com/a/9924325/717732
quetzalcoatl

10

Set digunakan untuk mengatur referensi objek, sebagai lawan untuk menetapkan nilai.


1

Dari atas kepala saya, Set digunakan untuk menetapkan objek COM ke variabel. Dengan melakukan Set saya menduga bahwa di bawah tenda itu melakukan panggilan AddRef () pada objek untuk mengelola itu seumur hidup.


1
Ini tidak hanya digunakan untuk objek COM, tetapi untuk semua objek. Alasan utama Anda menggunakan SET dijelaskan oleh Galwegian.
Ikke

0

Jadi, ketika Anda ingin menetapkan nilai, Anda tidak perlu "Set"; jika tidak, jika Anda merujuk ke objek, misalnya lembar kerja / rentang dll, Anda perlu menggunakan "Set".


-1

Set adalah kata kunci dan digunakan untuk menetapkan referensi ke suatu objek di VBA.

Untuk Eg, * Contoh di bawah ini menunjukkan cara menggunakan Set in VBA.

Dim WS As Worksheet

Set WS = ActiveWorkbook.Worksheets ("Sheet1")

WS.Name = "Amit"

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.