Cómo: Exponer código a VBA en un proyecto de Visual Basic
Puede exponer código en un proyecto de Visual Basic a código de Visual Basic para Aplicaciones (VBA) si desea que los dos tipos de código interactúen entre sí.
Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento para las siguientes aplicaciones: Excel 2007 y Excel 2010; Word 2007 y Word 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.
El proceso de Visual Basic es diferente del proceso de Visual C#. Para obtener más información, consulte Llamar a código de VBA en personalizaciones de nivel de documento y Cómo: Exponer código a VBA en un proyecto de Visual C#.
El proceso es diferente para el código de una clase de elemento host que para el código de otras clases:
Exponer código en una clase de elemento host
Exponer código que no se encuentra en una clase de elemento host
Dispone de una demostración en vídeo relacionada en How Do I: Call VSTO Code from VBA?.
Exponer código en una clase de elemento host
Para permitir que el código de VBA llame al código de Visual Basic en una clase de elemento host, establezca la propiedad EnableVbaCallers del elemento host en True.
Para obtener un tutorial en el que se muestra cómo exponer un método de una clase de elemento host y, a continuación, invocarlo desde VBA, vea Tutorial: Llamar a código de VBA en un proyecto de Visual Basic. Para obtener más información acerca de los elementos de host, vea Información general sobre elementos y controles Host.
Para exponer código de un elemento host a VBA
Abra o cree un proyecto de Visual Basic de nivel de documento basado en un documento de Word, un libro de Excel o una plantilla de Excel que admita macros y que ya contenga código de VBA.
Para obtener más información sobre los formatos de archivo de documento que admiten macros, vea Llamar a código de VBA en personalizaciones de nivel de documento.
Nota
Esta característica no se puede usar en los proyectos de plantilla de Word.
Asegúrese de que el código de VBA del documento se puede ejecutar sin pedir al usuario que habilite las macros. Puede confiar en que el código de VBA se ejecute si agrega la ubicación del proyecto de Office a la lista de ubicaciones de confianza en las opciones del Centro de confianza de Word o Excel.
Agregue la propiedad, el método o el evento que desea exponer a VBA a una de las clases de elemento host de su proyecto y declare el nuevo miembro como Public. El nombre de la clase depende de la aplicación:
En un proyecto de Word, la clase de elemento host se denomina de forma predeterminada ThisDocument.
En un proyecto de Excel, las clases de elemento host se denominan de forma predeterminada ThisWorkbook, Sheet1, Sheet2y Sheet3.
Establezca la propiedad EnableVbaCallers del elemento host en True. Esta propiedad está disponible en la ventana Propiedades cuando el elemento host se abre en el diseñador.
Después de establecer esta propiedad, Visual Studio establece automáticamente la propiedad ReferenceAssemblyFromVbaProject en True. Para obtener más información sobre esta propiedad, vea Llamar a código de VBA en personalizaciones de nivel de documento.
Nota
Si el libro o el documento aún no contiene código de VBA o si el código de VBA del documento no dispone de confianza para ejecutarse, recibirá un mensaje de error al establecer la propiedad EnableVbaCallers en True. Esto se debe a que Visual Studio no puede modificar el proyecto de VBA del documento cuando se da esta situación.
Haga clic en Aceptar en el mensaje que aparece. Este mensaje le recuerda que si agrega código de VBA al libro o el documento mientras ejecuta el proyecto desde Visual Studio, el código de VBA se perderá la próxima vez que genere el proyecto. Esto se debe a que el documento de la carpeta de salida de la compilación se sobrescribe cada vez se genera el proyecto.
Llegado a este punto, Visual Studio configura el proyecto de forma que el proyecto de VBA pueda llamar al ensamblado. Visual Studio también agrega una propiedad denominada CallVSTOAssembly al módulo ThisDocument, ThisWorkbook, Sheet1, Sheet2 o Sheet3 en el proyecto de VBA. Puede utilizar esta propiedad para tener acceso a los miembros públicos de la clase que expuso a VBA. Para obtener más información, vea Llamar a código de VBA en personalizaciones de nivel de documento.
Compile el proyecto.
Exponer código que no se encuentra en una clase de elemento host
Para permitir que el código de VBA llame al código de Visual Basic que no está en una clase de elemento host, modifique el código de forma que resulte visible para VBA.
Para exponer código que no está en una clase de elemento host a VBA
Abra o cree un proyecto de Visual Basic de nivel de documento basado en un documento de Word, un libro de Excel o una plantilla de Excel que admita macros y que ya contenga código de VBA.
Para obtener más información sobre los formatos de archivo de documento que admiten macros, vea Llamar a código de VBA en personalizaciones de nivel de documento.
Nota
Esta característica no se puede usar en los proyectos de plantilla de Word.
Asegúrese de que el código de VBA del documento se puede ejecutar sin pedir al usuario que habilite las macros. Puede confiar en que el código de VBA se ejecute si agrega la ubicación del proyecto de Office a la lista de ubicaciones de confianza en las opciones del Centro de confianza de Word o Excel.
Agregue el miembro que desea exponer a VBA a una clase pública del proyecto y declare el nuevo miembro como public.
Aplique los siguientes atributos ComVisibleAttribute y ComClassAttribute a la clase que expone a VBA. Estos atributos hacen que la clase sea visible para VBA.
<Microsoft.VisualBasic.ComClass()> _ <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Invalide el método GetAutomationObject de una clase de elemento host del proyecto para devolver una instancia de la clase que expone a VBA. El ejemplo de código siguiente supone que expone una clase denominada DocumentUtilities a VBA.
Protected Overrides Function GetAutomationObject() As Object Return New DocumentUtilities() End Function
Abra el diseñador de documentos (para Word) o de hojas de cálculo (para Excel) en Visual Studio.
En la ventana Propiedades, seleccione la propiedad ReferenceAssemblyFromVbaProject y cambie el valor a True.
Nota
Si el libro o el documento aún no contiene código de VBA o si el código de VBA del documento no dispone de confianza para ejecutarse, recibirá un mensaje de error al establecer la propiedad ReferenceAssemblyFromVbaProject en True. Esto se debe a que Visual Studio no puede modificar el proyecto de VBA del documento cuando se da esta situación.
Haga clic en Aceptar en el mensaje que aparece. Este mensaje le recuerda que si agrega código de VBA al libro o el documento mientras ejecuta el proyecto desde Visual Studio, el código de VBA se perderá la próxima vez que genere el proyecto. Esto se debe a que el documento de la carpeta de salida de la compilación se sobrescribe cada vez se genera el proyecto.
Llegado a este punto, Visual Studio configura el proyecto de forma que el proyecto de VBA pueda llamar al ensamblado. Visual Studio también agrega un método denominado GetManagedClass al proyecto de VBA. Puede llamar a este método desde cualquier parte del proyecto de VBA para tener acceso a la clase que expuso a VBA. Para obtener más información, consulte Llamar a código de VBA en personalizaciones de nivel de documento.
Compile el proyecto.
Vea también
Tareas
Cómo: Crear proyectos de Office en Visual Studio
Tutorial: Llamar a código de VBA en un proyecto de Visual Basic
Cómo: Exponer código a VBA en un proyecto de Visual C#
Conceptos
Llamar a código de VBA en personalizaciones de nivel de documento