Tutorial: Llamar a código de VBA en un complemento de nivel de aplicación
En este tutorial se muestra cómo exponer un objeto de un complemento de nivel de aplicación a otras soluciones de Microsoft Office, incluidos los complementos de Visual Basic para Aplicaciones (VBA) y COM.
Se aplica a: la información de este tema se aplica a los proyectos de nivel de aplicación para Microsoft Office 2010 y 2007 Microsoft Office System. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.
Aunque en este tutorial se usa específicamente Excel, los conceptos que se muestran son aplicables a cualquier plantilla de proyecto de complemento que proporcione Visual Studio.
En este tutorial se muestran las tareas siguientes:
Definir una clase que se pueda exponer a otras soluciones de Office.
Exponer la clase a otras soluciones de Office.
Llamar a un método de la clase desde código de VBA.
Nota
Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.
Requisitos previos
Necesita los componentes siguientes para completar este tutorial:
-
Una edición de Visual Studio 2010 que incluye las herramientas para desarrolladores de Microsoft Office. Para obtener más información, vea [Configurar un equipo para desarrollar soluciones de Office](bb398242\(v=vs.100\).md).
- Excel 2007 o Excel 2010.
Dispone de una versión en vídeo de este tema en Video How to: Calling Code in an Application-Level Add-in from VBA.
Crear el proyecto de complemento
El primer paso es crear un proyecto de complemento para Excel.
Para crear un nuevo proyecto
Cree un proyecto Complemento de Excel con el nombre ExcelImportData mediante la plantilla de proyecto Complemento de Excel. Para obtener más información, vea Cómo: Crear proyectos de Office en Visual Studio.
Visual Studio abre el archivo de código ThisAddIn.cs o ThisAddIn.vb y agrega el proyecto ExcelImportData al Explorador de soluciones.
Definir una clase que se pueda exponer a otras soluciones de Office
El propósito de este tutorial consiste en realizar una llamada en el método ImportData de una clase denominada AddInUtilities en el complemento desde código de VBA. Este método escribe una cadena en la celda A1 de la hoja de cálculo activa.
Para exponer la clase AddInUtilities a otras soluciones de Office, debe publicar la clase y hacerla visible para COM. También debe exponer la interfaz IDispatch en la clase. El código del procedimiento siguiente muestra una manera de cumplir estos requisitos. Para obtener más información, consulte Llamar a código en complementos de nivel de aplicación desde otras soluciones de Office.
Para definir una clase que se pueda exponer a otras soluciones de Office
En el menú Proyecto, haga clic en Agregar clase.
En el cuadro de diálogo Agregar nuevo elemento, cambie el nombre de la nueva clase a AddInUtilities y haga clic en Agregar.
El archivo AddInUtilities.cs o AddInUtilities.vb se abre en el editor de código.
Agregue las siguientes instrucciones al comienzo del archivo:
Imports System.Data Imports System.Runtime.InteropServices Imports Excel = Microsoft.Office.Interop.Excel
using System.Data; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel;
Reemplace la clase AddInUtilities con el código siguiente.
<ComVisible(True)> _ Public Interface IAddInUtilities Sub ImportData() End Interface <ComVisible(True)> _ <ClassInterface(ClassInterfaceType.None)> _ Public Class AddInUtilities Implements IAddInUtilities ' This method tries to write a string to cell A1 in the active worksheet. Public Sub ImportData() Implements IAddInUtilities.ImportData Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet If activeWorksheet IsNot Nothing Then Dim range1 As Excel.Range = activeWorksheet.Range("A1") range1.Value2 = "This is my data" End If End Sub End Class
[ComVisible(true)] public interface IAddInUtilities { void ImportData(); } [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] public class AddInUtilities : IAddInUtilities { // This method tries to write a string to cell A1 in the active worksheet. public void ImportData() { Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet; if (activeWorksheet != null) { Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing); range1.Value2 = "This is my data"; } } }
Este código hace que la clase AddInUtilities resulte visible para COM y agrega el método ImportData a la clase. Para exponer la interfaz IDispatch, la clase AddInUtilities también tiene el atributo ClassInterfaceAttribute, e implementa una interfaz visible en COM.
Exponer la clase a otras soluciones de Office
Para exponer la clase AddInUtilities a otras soluciones de Office, invalide el método RequestComAddInAutomationService de la clase ThisAddIn. En la invalidación, devuelva una instancia de la clase AddInUtilities.
Para exponer la clase AddInUtilities a otras soluciones de Office
En el Explorador de soluciones, expanda Excel.
Haga clic con el botón secundario en ThisAddIn.cs o ThisAddIn.vb y, a continuación, haga clic en Ver código.
Agregue el código siguiente a la clase ThisAddIn.
Private utilities As AddInUtilities Protected Overrides Function RequestComAddInAutomationService() As Object If utilities Is Nothing Then utilities = New AddInUtilities() End If Return utilities End Function
private AddInUtilities utilities; protected override object RequestComAddInAutomationService() { if (utilities == null) utilities = new AddInUtilities(); return utilities; }
En el menú Generar, haga clic en Generar solución.
Compruebe que la solución se genera sin errores.
Probar el complemento
Puede llamar a la clase AddInUtilities desde varios tipos diferentes de soluciones de Office. En este tutorial, utilizará código de VBA en un libro de Excel. Para obtener más información sobre los otros tipos de soluciones de Office que también puede utilizar, vea Llamar a código en complementos de nivel de aplicación desde otras soluciones de Office.
Para probar el complemento
Presione F5 para ejecutar el proyecto.
En Excel, guarde el libro activo como un Libro de Excel habilitado para macros (*.xlsm). Guárdelo en una ubicación conveniente, como el escritorio.
En la cinta de opciones, haga clic en la ficha Desarrollador.
Nota
Si la ficha Desarrollador no está visible, debe mostrarla primero. Para obtener más información, consulte Cómo: Mostrar la pestaña Programador en la cinta de opciones.
En el grupo Código, haga clic en Visual Basic.
Se abre el Editor de Visual Basic.
En la ventana Proyecto, haga doble clic en ThisWorkbook.
Se abre el archivo de código para el objeto ThisWorkbook.
Agregue el siguiente código de VBA al archivo de código. Este código obtiene en primer lugar un objeto COMAddIn que representa el complemento ExcelImportData. A continuación, utiliza la propiedad Object del objeto COMAddIn para llamar al método ImportData.
Sub CallVSTOMethod() Dim addIn As COMAddIn Dim automationObject As Object Set addIn = Application.COMAddIns("ExcelImportData") Set automationObject = addIn.Object automationObject.ImportData End Sub
Presione F5.
Compruebe que se ha agregado una nueva hoja Imported Data al libro. Compruebe también que la celda A1 contiene la cadena This is my data..
Salga de Excel.
Pasos siguientes
Puede obtener más información sobre cómo programar complementos en estos temas:
Usar la clase ThisAddIn para automatizar la aplicación host y realizar otras tareas en proyectos de complemento. Para obtener más información, vea Programar complementos de nivel de aplicación.
Cree un panel de tareas personalizado en un complemento. Para obtener más información, vea Información general sobre los paneles de tareas personalizados y Cómo: Agregar un panel de tareas personalizado a una aplicación.
Personalice la Cinta de opciones en un complemento. Para obtener más información, vea Información general sobre la cinta de opciones y Cómo: Iniciarse en la personalización de la cinta de opciones.
Vea también
Tareas
Cómo: Crear proyectos de Office en Visual Studio
Conceptos
Llamar a código en complementos de nivel de aplicación desde otras soluciones de Office
Personalizar características de la interfaz de usuario mediante interfaces de extensibilidad
Arquitectura de los complementos de nivel de aplicación