Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial paso a paso se muestra cómo llamar a un método en una personalización a nivel de documento para Microsoft Office Excel desde el código de Visual Basic para Aplicaciones (VBA) en el libro de trabajo. El procedimiento implica tres pasos básicos: agregar un método a la Sheet1 clase del elemento host, exponer el método al código VBA en el libro de trabajo y, a continuación, llamar al método desde código VBA en el libro de trabajo.
Se aplica a: La información de este tema se aplica a proyectos de nivel de documento para Excel y Word. Para obtener más información, vea Características disponibles por aplicación de Office y tipo de proyecto.
Aunque en este tutorial se usa Excel específicamente, los conceptos mostrados por el tutorial también son aplicables a proyectos de nivel de documento para Word.
En este tutorial se muestran las siguientes tareas:
Crear un libro que contenga código VBA.
Confiar en la ubicación del libro utilizando el Centro de confianza en Excel.
Agregar un método a la
Sheet1clase de elemento host.Extracción de una interfaz para la
Sheet1clase de elemento host.Exponer el método al código VBA.
Llamada al método desde código VBA.
Nota:
El equipo puede mostrar nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las instrucciones siguientes. La edición de Visual Studio que tiene y la configuración que usa determinan estos elementos. Para más información, vea Personalizar el IDE de Visual Studio.
Prerrequisitos
Necesitará los componentes siguientes para completar este tutorial:
Edición de Visual Studio que incluye las herramientas de desarrollo de Microsoft Office. Para obtener más información, vea Configurar un equipo para desarrollar soluciones de Office.
Microsoft Excel
Creación de un libro que contenga código VBA
El primer paso es crear un libro habilitado para macros que contenga una macro de VBA simple. Para poder exponer código en una personalización de VBA, el libro ya debe contener código VBA. De lo contrario, Visual Studio no puede modificar el proyecto de VBA para permitir que el código VBA llame al ensamblado de personalización.
Si ya tiene un libro que contiene código VBA que desea usar, puede omitir este paso.
Para crear un libro que contenga código VBA
Inicie Excel.
Guarde el documento activo como un Libro de Excel habilitado para macros (*.xlsm) con el nombre WorkbookWithVBA. Guárdelo en una ubicación conveniente, como el escritorio.
En la cinta de opciones, haga clic en la pestaña Programador .
Nota:
Si la pestaña Programador 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.
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 del
ThisWorkbookobjeto .Agregue el siguiente código VBA al archivo de código. Este código define una función sencilla que no hace nada. El único propósito de esta función es asegurarse de que existe un proyecto de VBA en el libro. Esto es necesario para los pasos posteriores de este tutorial.
Sub EmptySub() End SubGuarde el documento y salga de Excel.
Creación del proyecto
Ahora puede crear un proyecto a nivel de documento para Excel que utilice el libro de Excel habilitado para macros que creaste previamente.
Para crear un proyecto
Inicie Visual Studio.
En el menú Archivo, seleccione Nuevo y luego haga clic en Proyecto.
En el panel de plantillas, expanda Visual C# y, a continuación, expanda Office/SharePoint.
Seleccione el nodo Complementos de Office .
En la lista de plantillas de proyecto, seleccione el proyecto Libro de Excel 2010 o Libro de Excel 2013 .
En el cuadro Nombre , escriba CallingCodeFromVBA.
Haz clic en Aceptar.
Se abre el Asistente de proyectos de Visual Studio Tools para Office.
Seleccione Copiar un documento existente y, en el cuadro Ruta de acceso completa del documento existente , especifique la ubicación del libro WorkbookWithVBA que creó anteriormente. Si usa su propio libro de trabajo habilitado para macros, especifique la ubicación de ese libro.
Haga clic en Finalizar.
Visual Studio abre el libro WorkbookWithVBA en el diseñador y agrega el proyecto CallingCodeFromVBA al Explorador de soluciones.
Confiar en la ubicación del libro de trabajo
Antes de poder permitir que el código de su solución interactúe con el código VBA del libro, debe confiar en que el VBA del libro se ejecute. Hay varias maneras de hacerlo. En este tutorial, realizará esta tarea confiando en la ubicación del libro en el Centro de confianza en Excel.
Para confiar en la ubicación del libro de trabajo
Inicie Excel.
Haga clic en la pestaña Archivo .
Haga clic en el botón Opciones de Excel .
En el panel categorías, haga clic en Centro de confianza.
En el panel de detalles, haga clic en Configuración del Centro de confianza.
En el panel de categorías, haga clic en Ubicaciones de confianza.
En el panel de detalles, haga clic en Agregar nueva ubicación.
En el cuadro de diálogo Ubicación de confianza de Microsoft Office , vaya a la carpeta que contiene el proyecto CallingCodeFromVBA .
Seleccione Las subcarpetas de esta ubicación son también de confianza.
En el cuadro de diálogo Ubicación de confianza de Microsoft Office , haga clic en Aceptar.
En el cuadro de diálogo Centro de confianza , haga clic en Aceptar.
En el cuadro de diálogo Opciones de Excel , haga clic en Aceptar.
Salga de Excel.
Agregar un método a la clase Sheet1
Ahora que el proyecto de VBA está configurado, agregue un método público en la clase de elemento host Sheet1 que puede llamar desde código VBA.
Para agregar un método a la clase Sheet1
En el Explorador de soluciones, haga clic con el botón derecho en Sheet1.cs y, a continuación, haga clic en Ver código.
El archivo Sheet1.cs se abre en el Editor de código.
Agregue el código siguiente a la
Sheet1clase . ElCreateVstoNamedRangemétodo crea un nuevo NamedRange objeto en el intervalo especificado. Este método también crea un controlador de eventos para el Selected evento de NamedRange. Más adelante en este tutorial, llamará al método desde códigoCreateVstoNamedRangeVBA en el documento.private Microsoft.Office.Tools.Excel.NamedRange namedRange1; public void CreateVstoNamedRange(Excel.Range range, string name) { if (!this.Controls.Contains(name)) { namedRange1 = this.Controls.AddNamedRange(range, name); namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler( namedRange1_Selected); } else { MessageBox.Show("A named range with this specific name " + "already exists on the worksheet."); } } private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target) { MessageBox.Show("This named range was created by Visual Studio " + "Tools for Office."); }Agrega el método siguiente a la clase
Sheet1: Este método invalida el GetAutomationObject método para devolver la instancia actual de laSheet1clase .protected override object GetAutomationObject() { return this; }Aplique los atributos siguientes antes de la primera línea de la declaración de clase
Sheet1. Estos atributos hacen que la clase sea visible para COM, pero sin generar una interfaz de clase.[System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)]
Extracción de una interfaz para la clase Sheet1
Para poder exponer el CreateVstoNamedRange método al código VBA, debe crear una interfaz pública que defina este método y debe exponer esta interfaz a COM.
Para extraer una interfaz para la clase Sheet1
En el archivo de código Sheet1.cs , haga clic en cualquier lugar de la
Sheet1clase .En el menú Refactorizar , haga clic en Extraer interfaz.
En el cuadro de diálogo Extraer interfaz, en el cuadro Seleccionar miembros públicos para formar la interfaz, haga clic en la entrada del método
CreateVstoNamedRange.Haz clic en Aceptar.
Visual Studio genera una nueva interfaz denominada
ISheet1y modifica la definición de laSheet1clase para que implemente laISheet1interfaz. Visual Studio también abre el archivo ISheet1.cs en el Editor de código.En el archivo ISheet1.cs , reemplace la
ISheet1declaración de interfaz por el código siguiente. Este código hace que laISheet1interfaz sea pública y aplica el ComVisibleAttribute atributo para que la interfaz sea visible para COM.[System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); }Compile el proyecto.
Exposición del método al código VBA
Para exponer el método CreateVstoNamedRange al código VBA en el libro, configure la propiedad ReferenceAssemblyFromVbaProject para el elemento host Sheet1 a True.
Para exponer el método al código VBA
En el Explorador de soluciones, haga doble clic en Sheet1.cs.
El archivo WorkbookWithVBA se abre en el diseñador, con Sheet1 visible.
En la ventana Propiedades , seleccione la propiedad ReferenceAssemblyFromVbaProject y cambie el valor a True.
Haga clic en Aceptar en el mensaje que se muestra.
Compile el proyecto.
Llamada al método desde código VBA
Ahora puede llamar al método CreateVstoNamedRange desde el código VBA en el libro.
Nota:
En esta guía, añadirá código VBA al libro de trabajo durante la depuración del proyecto. El código VBA que agregue a este documento se sobrescribirá la próxima vez que compile el proyecto, ya que Visual Studio reemplaza el documento en la carpeta de salida de compilación por una copia del documento de la carpeta principal del proyecto. Si desea guardar el código VBA, puede copiarlo en el documento de la carpeta del proyecto. Para obtener más información, consulte Combinar VBA y personalizaciones de nivel de documento.
Para llamar al método desde código VBA
Presione F5 para ejecutar el proyecto.
En la pestaña Programador , en el grupo Código , haga clic en Visual Basic.
Se abre el Editor de Visual Basic.
En el menú Insertar , haga clic en Módulo.
Agregue el código siguiente al nuevo módulo.
Este código llama al método
CreateTabledel ensamblado de personalización. La macro accede a este método mediante el método globalGetManagedClasspara acceder a laSheet1clase de elemento host que ha expuesto al código VBA. ElGetManagedClassmétodo se generó automáticamente al establecer la propiedad ReferenceAssemblyFromVbaProject anteriormente en este tutorial.Sub CallVSTOMethod() Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1 Set VSTOSheet1 = GetManagedClass(Sheet1) Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange") End SubPresione F5.
En el libro abierto, haga clic en la celda A1 de Sheet1. Compruebe que aparece el cuadro de mensaje.
Salga de Excel sin guardar los cambios.
Pasos siguientes
Puede obtener más información sobre cómo llamar a código en soluciones de Office desde VBA en estos temas:
Ejecute el código en un elemento host en una personalización de Visual Basic desde VBA. Este proceso es diferente del proceso de Visual C#. Para obtener más información, vea Tutorial: Llamar al código desde VBA en un proyecto de Visual Basic.
Ejecute código en un complemento VSTO desde VBA. Para obtener más información, vea Tutorial: Llamar al código en un complemento de VSTO desde VBA.
Contenido relacionado
- Combinación de personalizaciones de VBA y de nivel de documento
- Personalizaciones de nivel de documento del programa
- Cómo: Exponer código a VBA en un proyecto de Visual Basic
- Cómo: Exponer código a VBA en un proyecto de Visual C#
- Guía paso a paso: llamar código desde VBA en un proyecto de Visual Basic