Actualizar módulo de funciones en excel

Actualizar módulo de funciones en excel

Tenemos varias hojas de cálculo de Excel que trabajan todas con un mismo módulo de funciones. Esta es la forma para que de forma automática se actualicen los módulos de todas las hojas al realizar una modificación en el módulo que alberga las funciones.

Tenemos una plantilla con dos módulos de funciones:

  • init: sólo con la función de actualización de módulos
  • vbapp: resto de funciones

El problema pasa por que son muchos los archivos que comparten el módulo “vbapp” para el funcionamiento de la hojas de cálculo por lo que cualquier modificación implica tener que actualizar este módulo en todos los archivos.

He intentado hacer uso de módulos compartidos pero al ser usados por distintos usuarios desde una unidad de red que está montada con distintos nombres no he conseguido que funcione.

De esta forma, el módulo “init” sólo albergará las funciones “update” e “importar” quienes serán las encargadas de sustituir el módulo “vbapp” por una versión más reciente gracias al siguiente código:

Option Explicit

Sub update()
    Dim m As VBComponent

	For Each m In ThisWorkbook.VBProject.VBComponents
        If m.Name = "vbapp" Then
            ThisWorkbook.VBProject.VBComponents.Remove m
        End If
    Next
    Application.OnTime Now, "importar"
End Sub

Sub importar()
    ThisWorkbook.VBProject.VBComponents.Import (Application.ActiveWorkbook.path & "\vba.bas")
End Sub

El proceso que sigue la función “update” es el siguiente:

  • Busca todos los componentes de Visual Basic del proyecto
  • Borra todos los que sean módulos que se llamen “vbapp”
  • Tras la limpieza importa el módulo “vba.bas”

Es imprescindible hacer la eliminación y la importación en funciones distintas de forma que se llama a la función “importar” mediante un “Application.OnTime Now” dentro de la función “update” ya que de otra forma se intenta hacer la importación del módulo antes de la eliminación del anterior lo que provoca que la importación se realiza con otro nombre en lugar de “vbapp”

Con esto ya sólo resta llamar a la función “update” y se actualizará el módulo de funciones.