Buscar..


Unión temprana vs Unión tardía

La vinculación es el proceso de asignar un objeto a un identificador o nombre de variable. El enlace temprano (también conocido como enlace estático) es cuando un objeto declarado en Excel es de un tipo de objeto específico, como una hoja de trabajo o un libro de trabajo. La vinculación tardía se produce cuando se realizan asociaciones de objetos generales, como los tipos de declaración Objeto y Variante.

Enlace anticipado de referencias algunas ventajas sobre el enlace tardío.

  • La vinculación temprana es operativamente más rápida que la vinculación tardía durante el tiempo de ejecución. Crear el objeto con un enlace tardío en tiempo de ejecución lleva tiempo que el enlace temprano se logra cuando el proyecto VBA se carga inicialmente.
  • El enlace temprano ofrece una funcionalidad adicional a través de la identificación de pares de Clave / Artículo por su posición ordinal.
  • Dependiendo de la estructura del código, el enlace temprano puede ofrecer un nivel adicional de verificación de tipos y reducir los errores.
  • La corrección de capitalización de VBE cuando se escriben las propiedades y los métodos de un objeto enlazado está activa con la vinculación temprana pero no está disponible con la vinculación tardía.

Nota: debe agregar la referencia apropiada al proyecto de VBA a través del comando Herramientas → Referencias de VBE para implementar el enlace temprano.
Esta referencia de la biblioteca se lleva entonces con el proyecto; no es necesario volver a referenciarlo cuando el proyecto de VBA se distribuye y ejecuta en otra computadora.

'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

Sin embargo, si está utilizando el enlace anticipado y el documento se ejecuta en un sistema que carece de una de las bibliotecas a las que ha hecho referencia, encontrará problemas. Las rutinas que utilizan la biblioteca faltante no solo no funcionarán correctamente, sino que el comportamiento de todo el código dentro del documento se volverá errático. Es probable que ninguno de los códigos del documento funcione en esa computadora.

Aquí es donde la unión tardía es ventajosa. Cuando utilice el enlace tardío, no tiene que agregar la referencia en el menú Herramientas> Referencias. En las máquinas que tienen la biblioteca adecuada, el código seguirá funcionando. En las máquinas sin esa biblioteca, los comandos que hacen referencia a la biblioteca no funcionarán, pero todos los demás códigos de su documento continuarán funcionando.

Si no está completamente familiarizado con la biblioteca a la que hace referencia, puede ser útil utilizar el enlace temprano al escribir el código, y luego cambiar al enlace tardío antes de la implementación. De esa manera, puede aprovechar el IntelliSense y el buscador de objetos de VBE durante el desarrollo.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow