worksheets workbooks workbook sub open objeto libro funcion especifico cerrar active vba excel

workbooks - ¿Cómo llamar a la función desde otro libro de trabajo específico en VBA?



workbooks.open vba (3)

Me gustaría saber si hay una forma de llamar a una función o método VBA desde otro módulo de libro de trabajo específico, ya que es posible para una hoja de trabajo específica sin usar la Aplicación. Ejecute

Para la hoja de trabajo puedo llamar por ejemplo:

ActiveSheet.MyTest()

si MyTest está definido en el módulo de hoja

Pero me gustaría llamar a una función que se define en un módulo

Lo intenté :

ActiveWorkbook.MyTestModule() ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg)

el cual no funciona generando un error. El objeto no soporta este método.

Podria llamar

Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg)

Pero no estoy seguro del manejo de errores de la Aplicación. Ejecutar y encontraríamos más limpio para ejecutar directamente el método


En el libro desde el que desea llamar (llamaré esto A), puede agregar una referencia al libro al que desea llamar (llamaré a este B) de la siguiente manera:

  1. En el libro de ejercicios A, abra la ventana Microsoft Visual Basic para aplicaciones (por ejemplo, presionando Alt + F11 ).
  2. Seleccione Herramientas, Referencias.
  3. En el cuadro de diálogo Referencias que aparece, seleccione Examinar.
  4. En el cuadro de diálogo Agregar referencia que aparece, elija Archivos de Microsoft Excel en el cuadro Tipo de archivo, seleccione el archivo al que desea llamar (B) y elija Abrir.
  5. Seleccione Aceptar para cerrar el cuadro de diálogo Referencias.

En el archivo A, debería poder llamar a funciones públicas de nivel de módulo en el archivo B como si estuvieran en el archivo A. Para resolver cualquier conflicto de nombres, puede prefijar las llamadas con el "Nombre del proyecto" para el archivo B como se especifica en el Pestaña general del cuadro de diálogo Propiedades del proyecto (accesible a través del comando Propiedades en el menú Herramientas de Microsoft Visual Basic para aplicaciones). Por ejemplo, si el "Nombre del proyecto" para el archivo B era "VBAProjectB", podría llamar a la función F desde el archivo A usando la sintaxis VBAProjectB.F.


Por cierto, esto también funciona si desea acceder a un tipo de datos personalizado en otro libro de trabajo:

'' In workbook ABC, project name Library Public Type Book_Data Title As String Pub_Date As Date Pub_City As String End Type '' In workbook DEF (after a ref to Library) Dim Book_Info As Library.Book_Data Book_Info.Title = "War and Peace" Debug.Print Book_Info.Title


Suponiendo que tiene 2 libros de trabajo "Hoja1" y "Hoja2".

Un método PUBLIC en "Sheet2" llamado DisplayMessage .

En "Sheet1" puedes hacer esto:

Public Sub SetParametersInSheet2(sParam As String) With Sheets("Sheet2") .Range("B3").Value = sParam ''range in Sheet2 '' --- calling function from another worksheet .DisplayMessage "from here!" End With

End Sub

El método en "Sheet2":

Public Sub DisplayMessage(sMess As String) Dim dCurrent As Date Dim sFormattedMess As String sFormattedMess = FormatDateTime(Now, vbLongTime) & ": " & sMess Range("I2").Value = sFormattedMess

End Sub