2012-04-04 69 views
14

Me gustaría saber si hay una manera de llamar a una función VBA o el método del módulo de otro libro especificada, ya que es posible que una hoja de cálculo específica sin utilizar el Application.Run¿Cómo llamar a la función de otro libro de trabajo específico en VBA?

Para la hoja de trabajo que pueda llamar, por ejemplo, :

ActiveSheet.MyTest() 

si MyTest se define en el módulo de hoja de

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

traté:

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

que no funcionan generando un objeto de error no soporta este método

podría llamar

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

Pero no estoy seguro de la gestión de errores de la Application.Run y Me gustaría encontrar un limpiador para ejecutar directamente el método

+0

http: // stackoverflow .com/search? q = application.run +% 5Bexcel% 5D – Fionnuala

+1

La única respuesta es utilizar Application.Run lo que intento av oid. ¿O debería asumir que no es posible? – Gutti

Respuesta

18

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

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

En el archivo A, debería poder llamar a las funciones públicas a nivel de módulo en el archivo B como si estuvieran en el archivo A. Para resolver cualquier conflicto de nombres, puede prefijar llamadas por el "Nombre del proyecto" para archivo B como se especifica en la 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 "VBAProyectoB", podría llamar a la función F desde el archivo A utilizando la sintaxis VBAProyectoB.F.

+1

Nota: Para hacer esto, no use 'VBAProject' como nombre, o entrará en conflicto. – Envite

-2

Suponiendo que tiene 2 libros de trabajo "Sheet1" y "Sheet2".

A PUBLIC método en "Hoja2" llamado DisplayMessage.

En "Hoja1" se puede 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 de "Hoja2":

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

+4

libro de trabajo no es lo mismo que hoja de cálculo – himura

Cuestiones relacionadas