programing

vba에서 dim과 set의 차이점은 무엇입니까?

minimums 2023. 5. 8. 22:00
반응형

vba에서 dim과 set의 차이점은 무엇입니까?

VBA 신입생으로서 죄송합니다.

가끔 사용합니다.

Dim r as Range
r = Range("A1")

내가 사용하는 다른 시간

Set r = Range("A1")

무엇이 다른가요?그리고 언제 무엇을 사용해야 합니까?

사용할 이유가 없습니다.set대상 참조를 참조하지 않는 한.그런 맥락에서만 사용하는 것이 좋습니다.다른 모든 단순 데이터 유형의 경우에는 할당 연산자를 사용합니다.하는 것이 좋습니다dim(차원) 그러나 모든 변수:

단순한 데이터 유형의 예는 다음과 같습니다.integer,long,boolean,string이들은 데이터 유형일 뿐 고유한 방법과 속성을 가지고 있지 않습니다.

Dim i as Integer
i = 5

Dim myWord as String
myWord = "Whatever I want"

의 예object가 될 것이.Range,aWorksheet또는Workbook이들은 고유한 방법과 특성을 가지고 있습니다.

Dim myRange as Range
Set myRange = Sheet1.Range("A1")

다음을 제외한 마지막 줄을 사용하려는 경우SetVB에서 오류가 발생합니다.이제 당신은 가지고 있습니다.object속성 및 메서드에 액세스할 수 있다고 선언했습니다.

myString = myRange.Value

하지만, 저는 이것이 당신이 정말로 요구하는 것이라고 생각하지 않습니다.

가끔 사용하는 경우:

    Dim r as Range
    r = Range("A1")

이건 절대 안 될 거예요.없이.Set런타임 오류 #91 Object variable 또는 With block variable not set을 받게 됩니다.사용해야 하기 때문입니다.Set변수 값을 객체 참조에 할당합니다.그러면 의 코드가 작동할 것입니다.

아래 코드가 당신이 정말로 무엇을 묻고 있는지를 보여준다고 생각합니다.유형을 선언하지 않고 다음과 같이 가정합니다.r을 보다Variant대신 타이핑합니다.

Public Sub test()
    Dim r
    debug.print TypeName(r)

    Set r = Range("A1")
    debug.print TypeName(r)

    r = Range("A1")
    debug.print TypeName(r)
End Sub

자, 여기서 일어나는 일들을 분석해 보겠습니다.

  1. r변종으로 선언됨

    `Dim r` ' TypeName(r) returns "Empty", which is the value for an uninitialized variant
    
  2. r에 설정됩니다.Range셀 "A1"을 포함

    Set r = Range("A1") ' TypeName(r) returns "Range"
    
  3. r기본 속성 으로 설정됩니다.Range("A1").

    r = Range("A1") ' TypeName(r) returns "String"
    

이 경우 범위의 기본 속성은 다음과 같습니다..Value따라서 다음 두 줄의 코드는 동일합니다.

r = Range("A1")
r = Range("A1").Value

기본 개체 속성에 대한 자세한 내용은 Chip Pearson의 "Default Member of a Class"를 참조하십시오.


당신의 경우는Set예:

내가 사용하는 다른 시간

Set r = Range("A1")

이것은 처음에 다음과 같이 선언하지 않고서는 작동하지 않을 것입니다.r이다.Range또는Variant객체...사용Dim진술 - 당신이 가지고 있지 않은 한.Option Explicit활성화해야 합니다.항상.그렇지 않으면 선언하지 않은 식별자를 사용하고 있으며 이러한 식별자는 모두 암묵적으로 변형으로 선언됩니다.

Dim: 변수를 정의하고 있습니다(여기서 r은 범위 유형의 변수입니다).

Set: 속성을 설정합니다(여기서 r의 값을 Range("A1")로 설정합니다). 이것은 유형이 아니라 값입니다.

r이 단순한 유형(예: int, string)이라면 set을 객체와 함께 사용해야 합니다.

Dim r As Integer
r=5

Dim값과 유형을 선언합니다.

Set변수에 값을 할당합니다.

변수가 객체로 정의된 경우(예:dim myfldr 폴더는 "Set" 키워드를 사용하여 값을 할당합니다.

DimDimension의 줄임말이며 VBA 및 VB6에서 로컬 변수를 선언하는 데 사용됩니다.

반면 설정은 변수 선언과 관련이 없습니다.Set키워드는 개체 변수를 새 개체에 할당하는 데 사용됩니다.

그것이 당신에게 차이점을 명확히 해주기를 바랍니다.

SET 문에 대한 VBA 도움말에 따르면 속성을 변경하면 실제 개체도 변경됩니다. object.so 에 대한 참조가 설정됩니다.

Dim newObj as Object
Set var1=Object1(same type as Object)
Set var2=Object1(same type as Object)
Set var3=Object1(same type as Object)
Set var4=Object1(same type as Object)
Var1.property1=NewPropertyValue

다른 Vars 속성도 변경되므로 다음과 같습니다.

Var1.property1=Var2.property1=Var3.property1=Var4.property1=Object1.Property1=NewpropertyValue`

실제로 모든 변수는 동일합니다!

언급URL : https://stackoverflow.com/questions/3872339/what-is-the-difference-between-dim-and-set-in-vba

반응형