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.

vínculo a vídeo 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

  1. En el menú Proyecto, haga clic en Agregar clase.

  2. 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.

  3. 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;
    
  4. 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

  1. En el Explorador de soluciones, expanda Excel.

  2. Haga clic con el botón secundario en ThisAddIn.cs o ThisAddIn.vb y, a continuación, haga clic en Ver código.

  3. 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;
    }
    
  4. 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

  1. Presione F5 para ejecutar el proyecto.

  2. 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.

  3. 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.

  4. En el grupo Código, haga clic en Visual Basic.

    Se abre el Editor de Visual Basic.

  5. En la ventana Proyecto, haga doble clic en ThisWorkbook.

    Se abre el archivo de código para el objeto ThisWorkbook.

  6. 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
    
  7. Presione F5.

  8. 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..

  9. Salga de Excel.

Pasos siguientes

Puede obtener más información sobre cómo programar complementos en estos temas:

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

Otros recursos

Programar complementos de nivel de aplicación

Desarrollar soluciones de Office