수색…


초기 바인딩 대 늦은 바인딩

바인딩은 객체를 식별자 나 변수 이름에 할당하는 프로세스입니다. 조기 바인딩 (정적 바인딩이라고도 함)은 Excel에서 선언 된 개체가 워크 시트 또는 통합 문서와 같은 특정 개체 유형 인 경우입니다. 후기 바인딩은 Object 및 Variant 선언 유형과 같이 일반 객체 연관이 만들어 질 때 발생합니다.

초기 바인딩은 후기 바인딩보다 몇 가지 이점을 참조합니다.

  • 초기 바인딩은 런타임 동안 후기 바인딩보다 운영상으로 빠릅니다. 런타임에 런타임에 바인딩을 사용하여 개체를 만들면 VBA 프로젝트가 처음로드 될 때 초기 바인딩이 수행하는 시간이 걸립니다.
  • 조기 바인딩은 서수 위치에 따라 키 / 항목 쌍을 식별하여 추가 기능을 제공합니다.
  • 코드 구조에 따라 초기 바인딩은 유형 검사의 추가 수준을 제공하고 오류를 줄일 수 있습니다.
  • 바운드 개체의 속성 및 메서드를 입력 할 때 VBE의 대문자 수정은 초기 바인딩에서는 활성화되지만 후기 바인딩에서는 사용할 수 없습니다.

참고 : 초기 바인딩을 구현하려면 VBE의 Tools → References 명령을 통해 VBA 프로젝트에 대한 적절한 참조를 추가해야합니다.
이 라이브러리 참조는 프로젝트와 함께 전달됩니다. VBA 프로젝트가 배포되어 다른 컴퓨터에서 실행될 때 다시 참조 할 필요가 없습니다.

'Looping through a dictionary that was created with late binding¹
Sub iterateDictionaryLate()
    Dim k As Variant, dict As Object
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict.comparemode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k
    
    dict.Remove "blue"      'remove individual key/item pair by key
    dict.RemoveAll          'remove all remaining key/item pairs

End Sub

'Looping through a dictionary that was created with early binding¹
Sub iterateDictionaryEarly()
    Dim d As Long, k As Variant
    Dim dict As New Scripting.Dictionary
    
    dict.CompareMode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    dict.Add Key:="White", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k

    'iterate through the keys by the count
    For d = 0 To dict.Count - 1
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    'iterate through the keys by the boundaries of the keys collection
    For d = LBound(dict.Keys) To UBound(dict.Keys)
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    dict.Remove "blue"                         'remove individual key/item pair by key
    dict.Remove dict.Keys(0)                   'remove first key/item by index position
    dict.Remove dict.Keys(UBound(dict.Keys))   'remove last key/item by index position
    dict.RemoveAll                             'remove all remaining key/item pairs

End Sub

그러나 이전 바인딩을 사용하고 있고 참조한 라이브러리 중 하나가 부족한 시스템에서 문서가 실행되는 경우 문제가 발생합니다. 누락 된 라이브러리를 사용하는 루틴은 제대로 작동하지 않을뿐만 아니라 문서 내의 모든 코드의 동작이 엉망이됩니다. 문서의 코드가 해당 컴퓨터에서 작동하지 않을 가능성이 있습니다.

이것은 늦은 바인딩이 유리한 곳입니다. 후기 바인딩을 사용할 때 도구> 참조 메뉴에서 참조를 추가 할 필요가 없습니다. 적절한 라이브러리가있는 시스템에서 코드는 계속 작동합니다. 해당 라이브러리가없는 시스템에서는 라이브러리를 참조하는 명령이 작동하지 않지만 문서의 다른 모든 코드는 계속 작동합니다.

참조하는 라이브러리에 익숙하지 않은 경우 초기 바인딩을 사용하여 코드를 작성한 다음 배포 전에 런타임에 바인딩으로 전환하는 것이 유용 할 수 있습니다. 이렇게하면 개발 중에 VBE의 IntelliSense 및 개체 브라우저를 활용할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow