Saltar al contenido

Cómo evitar referencias en VBA (enlace temprano frente a enlace tardío)

Solución:

Por favor, eche un vistazo a “VBA Early Binding” y “VBA Late Binding”. para conocer las ventajas y desventajas de ambos métodos.

Está utilizando Earling Binding en esta línea: Set oFS = New FileSystemObject. “Nuevo” es un buen indicador de que se utiliza la vinculación anticipada. Es por eso que debe habilitar una referencia en cada máquina donde se ejecuta la macro.

Si usa Enlace tardío, no es necesario que habilite las referencias. La macro funcionaría en todas las máquinas.

ingrese la descripción de la imagen aquí

Puede convertir Early Binding

Dim oFS  As FileSystemObject 
Set oFS = New FileSystemObject

a la vinculación tardía

Dim oFS  As Object 
Set oFS = CreateObject("Scripting.FileSystemObject")

Atención: Si utiliza Enlace tardío, el sistema desconoce los valores numéricos subyacentes de las variables con nombre. Tienes que convertir esas variables nombradas a su valor numérico correspondiente.

Para obtener el valor numérico, vuelva a habilitar temporalmente su biblioteca (p. Ej. Tiempo de ejecución de secuencias de comandos de Microsoft), vaya al editor de VBA y abra la ventana inmediata (CONTROL+GRAMO). Escribir por ejemplo ?TemporaryFolder en la ventana inmediata y presione enter. Como ves en la captura de pantalla 2 es el valor de nuestra variable nombrada TemporaryFolder

ingrese la descripción de la imagen aquí

Repita los pasos para todas las demás variables problemáticas y reemplácelas con su valor. Finalmente, desmarque la referencia de la biblioteca y su código se ejecutará en todas las máquinas, ya sea que la biblioteca esté habilitada o no.

oFS.GetSpecialFolder(TemporaryFolder)   'with Early Binding
oFS.GetSpecialFolder(2)                 'with Late Binding

Es bueno saber que

  • El enlace temprano (enlaces de referencia comprobados explícitamente) es útil para el desarrollo o la depuración, debido al editor de VBA Intellisense, un fuerte control de tipo de objeto y constantes con nombre. También se informa que es más rápido.
  • El enlace tardío (independiente de los enlaces de referencia) es útil para la compatibilidad entre máquinas.

Utilizo con ventaja el cambio rápido de enlace Temprano / Tardío.

  • Establecí por el Editor de VBA en las propiedades del proyecto VBA los argumentos de compilación condicional para EarlyBinding = 1.

Propiedades del proyecto VBA

  • Entonces utilizo para el desarrollo las directivas de compilación condicional como a continuación, con la rama EarlyBinding activa.
  • Cuando esté listo para lanzar, cambio a EarlyBinding = 0 y el proyecto cambia de encuadernación temprana a encuadernación tardía para la prueba de encuadernación tardía final.
  • Editar: no olvide cancelar las referencias previamente utilizadas explícitamente para el enlace anticipado

Para el ejemplo de FileSystemObject TemporaryFolder, se puede ilustrar como:

Sub EarlyVsLateBindingtest()

#If Earlybinding Then
   Dim oFS As Scripting.FileSystemObject
   Set oFS = New Scripting.FileSystemObject
#Else
   Const TemporaryFolder = 2
   Dim oFS As Object
   Set oFS = CreateObject("Scripting.FileSystemObject")
#End If

oFS.GetSpecialFolder (TemporaryFolder)

End Sub
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *