Como: Expor código VBA em um projeto do Visual C#

Você pode expor o código de um Visual C# projeto para Visual Basic for Applications o código VBA () se você desejar que os dois tipos de código para interagir entre si.

O processo do Visual C# é diferente do processo de Visual Basic. For more information, see Código de chamada personalizações em nível de documento do VBA and Como: Expor código VBA em um projeto de Visual Basic.

Aplicável a: As informações neste tópico se aplicam a projetos de nível de documento para os seguintes aplicativos: Excel 2007 e Excel 2010; Word 2007 e Word 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Expor código em um projeto do Visual C#

Para ativar o código do VBA chamar o código em um projeto do Visual C#, modificar o código para que fique visível para COM e, em seguida, defina a ReferenceAssemblyFromVbaProject propriedade para True no designer.

Para uma explicação passo a passo que demonstra como chamar um método em um projeto do Visual C# do VBA, consulte Demonstra Passo a passo: Chamar o código do VBA em um projeto do Visual C#.

Para expor o código em um projeto do Visual C# ao VBA

  1. Abra ou crie um projeto de nível de documento que se baseia em um documento do Word, pasta de trabalho do Excel ou modelo do Excel oferece suporte a macros e que já contém o código do VBA.

    Para obter mais informações sobre os formatos de arquivo do documento que oferecem suporte a macros, consulte Código de chamada personalizações em nível de documento do VBA.

    ObservaçãoObservação

    Este recurso não pode ser usado em projetos de modelo do Word.

  2. Certifique-se de que o código do VBA no documento pode ser executado sem avisar o usuário habilitar as macros. Você pode confiar em código VBA, adicionando o local do projeto do Office à lista de locais confiáveis em que as configurações da Central de confiabilidade para o Word ou Excel.

  3. Adicionar o membro que você deseja expor para o VBA para uma classe pública em seu projeto e declara um novo membro como public.

  4. Aplicar o seguinte ComVisibleAttribute e ClassInterfaceAttribute atributos à classe que você está expondo a VBA. Esses atributos tornam visível a classe COM, mas sem gerar uma interface de classe.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. Substituir o GetAutomationObject método de uma classe de item de host em seu projeto para retornar uma instância da classe que você está expondo a VBA:

    • Se você estiver expondo uma classe de item de host para o VBA, substituir o GetAutomationObject método que pertence a essa classe e retorna a instância atual do que a classe.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Se você estiver expondo uma classe que não é um item de host para o VBA, substituir o GetAutomationObject o método de qualquer host do item no seu projeto e retornar uma instância do host não item classe. Por exemplo, o código a seguir supõe que você estiver expondo uma classe chamada DocumentUtilities para VBA.

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

    Para obter mais informações sobre itens de host, consulte Itens de host e a visão geral sobre controles de Host.

  6. Extrai uma interface da classe que você está expondo a VBA. No Extrair Interface caixa de diálogo, selecione os membros públicos que você deseja incluir na declaração de interface. For more information, see Extrair Interface Refatoração (C#).

  7. Adicionar o public palavra-chave para a declaração de interface.

  8. Tornar a interface visível para COM adicionando o seguinte ComVisibleAttribute atributo para a interface.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Abra o documento (para Word) ou a planilha (Excel) no designer no Visual Studio.

  10. No Propriedades janela, selecione o ReferenceAssemblyFromVbaProject propriedade e altere o valor para True.

    ObservaçãoObservação

    Se a pasta de trabalho ou o documento ainda não contiver código VBA ou se o código do VBA no documento não é confiável para executar, você receberá uma mensagem de erro ao definir o ReferenceAssemblyFromVbaProject propriedade para True. Isso ocorre porque Visual Studio não é possível modificar o projeto VBA do documento nesta situação.

  11. Clique em OK na mensagem que é exibida. Esta mensagem lembra que, se você adicionar o VBA de código para a pasta de trabalho ou ao executar o projeto a partir de documentos Visual Studio, o código do VBA serão perdido na próxima vez que você construir o projeto. Isso ocorre porque o documento na compilação de pasta é sobrescrita sempre que você constrói o projeto de saída.

    Neste ponto, Visual Studio configura o projeto de forma que o projeto do VBA pode chamar o assembly. Visual Studio também adiciona um método chamado GetManagedClass para o projeto do VBA. Você pode chamar esse método em qualquer lugar no projeto VBA para acessar a classe que é exposto a VBA. For more information, see Código de chamada personalizações em nível de documento do VBA.

  12. Build the project.

Consulte também

Tarefas

Como: Criar projetos do Office em Visual Studio

Demonstra Passo a passo: Chamar o código do VBA em um projeto do Visual C#

Como: Expor código VBA em um projeto de Visual Basic

Conceitos

Código de chamada personalizações em nível de documento do VBA

Outros recursos

Projetando e criando soluções do Office

Combinando o VBA e personalizações em nível de documento