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:
- En el libro de ejercicios A, abra la ventana Microsoft Visual Basic para aplicaciones (por ejemplo, presionando Alt + F11 ).
- Seleccione Herramientas, Referencias.
- En el cuadro de diálogo Referencias que aparece, seleccione Examinar.
- 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.
- 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