Tutorial: Llamada al código en un complemento de VSTO desde VBA

Este tutorial muestra cómo exponer un objeto de un complemento de VSTO a otras soluciones de Microsoft Office, incluido Visual Basic para aplicaciones (VBA) y complementos VSTO de COM.

Se aplica a: La información de este tema se aplica a los proyectos de complemento de VSTO. Para obtener más información, consulte Características disponibles por aplicación de Office lication y tipo de proyecto.

Aunque este tutorial usa concretamente Excel, los conceptos que se muestran en él se pueden aplicar a cualquier plantilla de proyecto de complementos de VSTO proporcionada por Visual Studio.

En este tutorial se muestran las tareas siguientes:

  • Definir una clase que se puede 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 VBA.

    Nota:

    Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. 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 Personalizar el IDE.

Requisitos previos

Necesitará los componentes siguientes para completar este tutorial:

Creación del proyecto de complemento de VSTO

El primer paso es crear un proyecto de complemento de VSTO para Excel.

Para crear un nuevo proyecto

  1. Cree un proyecto de complemento de VSTO para Excel con el nombre ExcelImportDatamediante la plantilla de proyecto de complementos de VSTO para Excel. Para obtener más información, consulta How to: Create Office Projects in Visual Studio.

    Visual Studio abre el archivo de código ThisAddIn.cs o ThisAddIn.vb y agrega el proyecto ExcelImportData a Explorador de soluciones.

Definir una clase que pueda exponer a otras soluciones de Office

El propósito de este tutorial es llamar a al método ImportData de una clase denominada AddInUtilities en el complemento de VSTO 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 hacer que la clase sea pública y visible para COM. También debe exponer la interfaz IDispatch de la clase. El código del procedimiento siguiente muestra una manera de cumplir estos requisitos. Para obtener más información, consulta Calling Code in VSTO Add-ins from Other Office Solutions.

Para definir una clase que 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 AddInUtilitiesy haga clic en Agregar.

    El archivo AddInUtilities.cs o AddInUtilities.vb se abre en el Editor de código.

  3. Agregue las siguientes directivas al principio del archivo.

    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. Reemplace la clase AddInUtilities por el siguiente código.

    [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 sea 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 que es visible para COM.

Exponer la clase a otras soluciones de Office

Para exponer la clase AddInUtilities a otras soluciones de Office, invalide el método RequestComAddInAutomationService en la clase ThisAddIn . Al invalidarlo, 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 el archivo ThisAddin.cs o ThisAddin.vby, a continuación, haga clic en Ver código.

  3. Agregue el siguiente código a la clase ThisAddIn .

    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. En el menú Compilar , haga clic en Compilar solución.

    Compruebe que la solución se compila sin errores.

Prueba del complemento VSTO

Puede llamar a la clase AddInUtilities desde varios tipos distintos de soluciones de Office. En este tutorial, usará el código VBA en un libro de Excel. Para obtener más información sobre los otros tipos de soluciones de Office que también puede usar, vea Llamar al código en complementos de VSTO desde otras soluciones de Office.

Para probar el complemento de VSTO

  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 pestaña Desarrollador .

    Nota:

    Si la pestaña Desarrollador no está visible, primero debe mostrarla. Para obtener más información, vea Cómo: Mostrar la pestaña programador en la cinta de opciones.

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

    Se abrirá el Editor de Visual Basic.

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

    Se abrirá el archivo de código para el objeto ThisWorkbook .

  6. Agregue el código VBA siguiente al archivo de código. Este código obtiene primero un objeto COMAddIn que representa el complemento VSTO de ExcelImportData . A continuación, el código usa la propiedad Object del objeto COMAddIn para llamar al ImportData método .

    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 al libro la hoja nueva Datos importados . 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 acerca de la programación de complementos de VSTO en estos temas: