Compartir a través de


Cómo: Exponer código a VBA en un proyecto de Visual Basic

Actualización: noviembre 2007

Se aplica a

La información de este tema sólo se aplica a los proyectos y versiones especificados de Visual Studio Tools para Office de Microsoft Office.

Tipo de proyecto

  • Proyectos de nivel de documento

Versión de Microsoft Office

  • Microsoft Office System 2007

Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto.

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

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

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 tener acceso a un tutorial que muestra cómo exponer un método de una clase de elemento host y, a continuación, llamarlo 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

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

  2. 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 Visual Studio Tools para Office a la lista de ubicaciones de confianza en las opciones del Centro de confianza de Word o Excel.

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

  4. 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 Tools para Office 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 Tools para Office no puede modificar el proyecto de VBA del documento cuando se da esta situación.

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

    En este punto, Visual Studio Tools para Office configura el proyecto para que el proyecto de VBA pueda llamar en el ensamblado. Visual Studio Tools para Office también agrega una propiedad denominada CallVSTOAssembly a los módulos ThisDocument, ThisWorkbook, Sheet1, Sheet2o Sheet3 del 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.

  6. Genere 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

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

  2. 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 Visual Studio Tools para Office a la lista de ubicaciones de confianza en las opciones del Centro de confianza de Word o Excel.

  3. Agregue el miembro que desea exponer a VBA a una clase pública del proyecto y declare el nuevo miembro como public.

  4. 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)> _
    
  5. 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
    
  6. Abra el diseñador de documentos (para Word) o de hojas de cálculo (para Excel) en Visual Studio.

  7. 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 Tools para Office no puede modificar el proyecto de VBA del documento cuando se da esta situación.

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

    En este punto, Visual Studio Tools para Office configura el proyecto para que el proyecto de VBA pueda llamar en el ensamblado. Visual Studio Tools para Office 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.

  9. Genere el proyecto.

Vea también

Tareas

Cómo: Crear proyectos de Visual Studio para Office

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

Crear soluciones de Office en Visual Studio

Combinar personalizaciones de VBA y de nivel de documento

Llamar a código de VBA en personalizaciones de nivel de documento