Từ khóa Set thực sự làm gì trong VBA?


Câu trả lời:


95

setđược sử dụng để gán tham chiếu cho một đối tượng. Tương đương C sẽ là

 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
Một tham chiếu đối tượng VB không hoàn toàn giống như một con trỏ C. Và không có tương đương với "& i" trong VB.
Tomalak

10
Không hoàn toàn giống nhau, không. Nhưng đủ gần để tôi hiểu khái niệm.
Treb

@Tomalak: Bạn có thể sử dụng VarPtr ()
Atmocreations

Đây không phải là một sự tương tự tốt. Lấy ví dụ này ( VBA on the left | C on the right) : Dim A, B As Range | Range A, B;. Tương tự như vậy, A = B | A = B;sẽ đúng (và nó sẽ bằng C), nhưng Set A = B | A = &B;thực sự đúng trong VBA (và nó sẽ thất bại ở C). Trong VBA, A = BSet A = Bcả hai đều tương đương với C A = B;! Sự phân biệt xảy ra ở một nơi khác.
Niko O

77

Trong trường hợp của bạn, nó sẽ tạo ra một lỗi. :-)

Setgán một tham chiếu đối tượng. Đối với tất cả các bài tập khác, câu lệnh (ngầm, tùy chọn và ít sử dụng) Letlà chính xác:

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

Từ MSDN :

Đặt từ khóa: Trong VBA, từ khóa Set là cần thiết để phân biệt giữa gán đối tượng và gán thuộc tính mặc định của đối tượng. Vì các thuộc tính mặc định không được hỗ trợ trong Visual Basic .NET, từ khóa Set không cần thiết và không còn được hỗ trợ.


Được tìm thấy tốt, nhưng một liên kết đến bài viết bạn tìm thấy trên MSDN thậm chí còn tốt hơn :)
Neil Barnwell

1
@Neil - liên kết là có nếu bạn nhấp vào MSDN trong bài viết của tôi.
Gal Giang

2
Khi sao chép MSDN, thì ít nhất là bài viết chính xác. Cái này đề cập đến VB.NET, không phải VBA.
Tomalak

1
OP đang hỏi về VBA và mặc dù thông tin về Set không còn cần thiết để sử dụng trong .NET là hữu ích, nhưng đó không phải là chủ đề và không hữu ích cho những người đến đây với Object variable or With block variable not setlỗi từ VBA :)
AJP

7
Cảm ơn bạn rất nhiều vì trích xuất từ ​​MSDN. Tất cả các câu trả lời khác, ngay cả câu trả lời được chấp nhận đều thiếu điểm. 'thiết lập' là tất cả về SỞ HỮU DEFAULT. Chỉ cần đọc stackoverflow.com/a/9924325/717732
quetzalcoatl

10

Set được sử dụng để thiết lập các tham chiếu đối tượng, trái ngược với việc gán một giá trị.


1

Ngoài đỉnh đầu của tôi, Set được sử dụng để gán các đối tượng COM cho các biến. Bằng cách thực hiện Set tôi nghi ngờ rằng dưới mui xe, nó thực hiện lệnh gọi AddRef () trên đối tượng để quản lý vòng đời của nó.


1
Nó không chỉ được sử dụng cho các đối tượng COM, mà còn cho tất cả các đối tượng. Lý do chính bạn sử dụng SET được giải thích bởi Galiến.
Ikke

0

Vì vậy, khi bạn muốn đặt giá trị, bạn không cần "Đặt"; mặt khác, nếu bạn đang đề cập đến một đối tượng, ví dụ: bảng tính / phạm vi, v.v., bạn cần sử dụng "Đặt".


-1

Set là một Keyword và nó được sử dụng để gán tham chiếu cho Object trong VBA.

Ví dụ: * Dưới đây ví dụ cho thấy cách sử dụng Set trong VBA.

Dim WS dưới dạng trang tính

Đặt WS = ActiveWorkbook.Worksheet ("Sheet1")

WS.Name = "Amit"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.