Compartilhar via


Expor código ao VBA em um projeto Visual C#

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

O processo do Visual C# é diferente do processo do Visual Basic. Para obter mais informações, consulte Como: Expor código para VBA em um projeto do Visual Basic.

Aplica-se a: As informações neste tópico se aplicam a projetos de nível de documento para Excel e Word. Para obter mais informações, consulte Recursos disponíveis por aplicativo e tipo de projeto do Office.

Expor código em um projeto Visual C#

Para habilitar o código VBA para chamar código em um projeto Visual C#, modifique o código para que ele seja visível para COM e, em seguida, defina a propriedade ReferenceAssemblyFromVbaProject como True no designer.

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

Para expor código em um projeto Visual C# para VBA

  1. Abra ou crie um projeto de nível de documento baseado em um documento do Word, pasta de trabalho do Excel ou modelo do Excel que ofereça suporte a macros e que já contenha código VBA.

    Para obter mais informações sobre os formatos de arquivo de documento que oferecem suporte a macros, consulte Combinar VBA e personalizações em nível de documento.

    Observação

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

  2. Certifique-se de que o código VBA no documento tenha permissão para ser executado sem solicitar que o usuário habilite macros. Você pode confiar no código VBA a ser executado adicionando o local do projeto do Office à lista de locais confiáveis nas configurações da Central de Confiabilidade para Word ou Excel.

  3. Adicione o membro que você deseja expor ao VBA a uma classe pública em seu projeto e declare o novo membro como público.

  4. Aplique os seguintes ComVisibleAttribute atributos e ClassInterfaceAttribute à classe que você está expondo ao VBA. Esses atributos tornam a classe visível para COM, mas sem gerar uma interface de classe.

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

    • Se você estiver expondo uma classe de item de host ao VBA, substitua o método GetAutomationObject que pertence a essa classe e retorne a instância atual da classe.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Se você estiver expondo uma classe que não é um item de host para VBA, substitua o método GetAutomationObject de qualquer item de host em seu projeto e retorne uma instância da classe de item não-host. Por exemplo, o código a seguir pressupõe que você está expondo uma classe nomeada DocumentUtilities para VBA.

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

      Para obter mais informações sobre itens de host, consulte Visão geral sobre itens de host e controles de host.

  6. Extraia uma interface da classe que você está expondo ao VBA. Na caixa de diálogo Extrair Interface, selecione os membros públicos que você deseja incluir na declaração de interface. Para obter mais informações, consulte Extrair refatoração de interface.

  7. Adicione a palavra-chave public à declaração de interface.

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

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

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

    Observação

    Se a pasta de trabalho ou documento ainda não contém código VBA ou se o código VBA no documento não é confiável para execução, você receberá uma mensagem de erro quando definir a propriedade ReferenceAssemblyFromVbaProject como True. Isso ocorre porque o Visual Studio não pode modificar o projeto VBA no documento nessa situação.

  11. Clique em OK na mensagem exibida. Essa mensagem lembra que se você adicionar código VBA à pasta de trabalho ou documento ao executar o projeto do Visual Studio, o código VBA será perdido na próxima vez que você criar o projeto. Isso ocorre porque o documento na pasta de saída da compilação é substituído toda vez que você compila o projeto.

    Neste ponto, o Visual Studio configura o projeto para que o projeto VBA possa chamar o assembly. Visual Studio também adiciona um método chamado GetManagedClass para o projeto VBA. Você pode chamar esse método de qualquer lugar no projeto VBA para acessar a classe que você expôs ao VBA.

  12. Compile o projeto.