키워드 세트는 실제로 VBA에서 무엇을합니까?


150

희망적인 질문이지만, 이것에 대한 기술적 답변을 원합니다!

차이점은 무엇입니까?

i = 4

Set i = 4

VBA에서? 후자가 오류가 발생한다는 것을 알고 있지만 이유를 완전히 이해하지 못합니다.


4
배경
지식

답변:


95

set객체에 참조를 할당하는 데 사용됩니다. C에 해당하는 것은

 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
VB 객체 참조는 C 포인터와 동일하지 않습니다. VB에는 "& i"에 해당하는 것이 없습니다.
Tomalak

10
동일하지 않습니다. 그러나 개념을 이해하기에 충분히 가까워졌습니다.
Treb

@Tomalak : 당신은 아래 문장 () 사용할 수 있습니다
Atmocreations

이것은 좋은 비유가 아닙니다. 이 예를 보자 ( VBA on the left | C on the right) : Dim A, B As Range | Range A, B;. 당신의 비유로 가면 A = B | A = B;정확하고 (C에있을 것입니다) Set A = B | A = &B;실제로 VBA에서는 정확합니다 (C에서는 실패 할 것입니다). VBA에서, A = B그리고 Set A = BC의 모두에 동일합니다 A = B;! 구별은 다른 곳에서 발생합니다.
Niko O

77

귀하의 경우 오류가 발생합니다. :-)

Set객체 참조를 할당합니다. 다른 모든 할당의 경우 (암시 적, 선택적 및 거의 사용되지 않은) Let문이 정확합니다.

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

에서 MSDN :

키워드 설정 : VBA에서 오브젝트 설정과 오브젝트의 기본 속성 지정을 구별하려면 Set 키워드가 필요합니다. Visual Basic .NET에서는 기본 속성이 지원되지 않으므로 Set 키워드는 필요하지 않으며 더 이상 지원되지 않습니다.


음 발견,하지만 당신은 MSDN에있는 기사에 대한 링크가 더 나은 :) 것
닐 Barnwell

1
@Neil-내 게시물에서 MSDN을 클릭하면 링크가 있습니다.
Galwegian

2
MSDN을 복사 할 때 적어도 올바른 기사. 이것은 VBA가 아니라 VB.NET을 나타냅니다.
Tomalak

1
OP는 VBA에 대해 질문하고 있으며 .NET에서 더 이상 필요하지 않은 Set에 대한 정보는 유용하지만 Object variable or With block variable not setVBA 의 오류 로 인해 여기에 도착하는 사람들에게는 도움이되지 않습니다. :)
AJP

7
MSDN에서 추출해 주셔서 감사합니다. 다른 모든 답변, 수락 된 답변조차도 요점이 없습니다. '집합'은 기본 속성에 관한 것입니다. 그냥 읽어 stackoverflow.com/a/9924325/717732
케찰코아틀을

10

Set은 값을 할당하는 것과 반대로 객체 참조를 설정하는 데 사용됩니다.


1

내 머리 꼭대기에서 Set은 COM 객체를 변수에 할당하는 데 사용됩니다. Set을 수행함으로써 나는 후드 아래에서 객체의 수명을 관리하기 위해 객체에서 AddRef () 호출을하고 있다고 생각합니다.


1
COM 개체뿐만 아니라 모든 개체에 사용됩니다. SET를 사용하는 주된 이유는 Galwegian가 설명합니다.
Ikke

0

따라서 값을 설정하려는 경우 "Set"이 필요하지 않습니다. 그렇지 않으면 워크 시트 / 범위 등의 개체를 참조하는 경우 "Set"을 사용해야합니다.


-1

Set은 키워드이며 VBA의 개체에 대한 참조를 할당하는 데 사용됩니다.

예를 들어 * 아래 예는 VBA에서 Set을 사용하는 방법을 보여줍니다.

워크 시트로 Dim WS

WS = ActiveWorkbook.Worksheets ( "Sheet1") 설정

WS.Name = "승인"

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.