Compartilhar via


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

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

O processo do Visual C# é diferente do processo do Visual Basic.Para obter mais informações, consulte Como: expor um 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 2013 e Excel 2010; Word 2013 e Word 2010. Para obter mais informações, consulte Recursos disponíveis pelo aplicativo do Office e o tipo de projeto.

Expõe o código em um projeto visual C#

Para ativar o código de VBA para chamar código em um projeto visual C#, altere o código para que é visível COM a, e defina a propriedade de ReferenceAssemblyFromVbaProject a True no designer.

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

Para expor o código em um Projeto visual basic a VBA

  1. Abra ou crie um projeto de um documento nível baseado em um documento do word, em um modelo de pasta de trabalho do Excel, ou do excel que suportem macros, e que já contém o código de VBA.

    Para obter mais informações sobre formatos de arquivo de documento que suportam macros, consulte Combinando o VBA e personalizações em nível de documento.

    ObservaçãoObservação

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

  2. Certifique-se de que o código de VBA no documento seja permitido executar sem avisar o usuário para ativar macros.Você pode confiar o código de VBA para executar adicionando o local do projeto do Office à lista de locais confiáveis nas configurações do centro de confiança por palavras ou Excel.

  3. Adicione o membro que você deseja expor a VBA a uma classe pública em seu projeto, e declarar o novo membro como public.

  4. Aplicar os seguintes ComVisibleAttribute e atributos de ClassInterfaceAttribute a classe que você está exposto a VBA.Esses atributos tornam a classe visível COM a, mas sem gerar uma interface da classe.

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

    • Se você estiver uma classe de item host a VBA, substitui o método de GetAutomationObject que pertence à classe, e retornar a instância atual da classe.

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

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

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

  6. Extrair uma interface da classe que você está exposto a VBA.Em a caixa de diálogo, selecione Extrair interface membros públicos que você deseja incluir na declaração de interface.Para obter mais informações, consulte Extrair Interface refatoração (C#).

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

  8. Faça a interface visível COM a adicionando o seguinte atributo de ComVisibleAttribute a interface.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Abra o documento (para word) ou a planilha do excel (para) no designer em Visual Studio.

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

    ObservaçãoObservação

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

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

    Em este ponto, o Visual Studio configurar o projeto para que o projeto de VBA pode chamar no assembly.Visual Studio também adiciona um método chamado GetManagedClass ao projeto de VBA.Você pode chamar esse método em qualquer lugar dentro do projeto de VBA acessar a classe que você tenha expostos a VBA.

  12. Crie o projeto.

Consulte também

Tarefas

Como: criar projetos do Office em Visual Studio

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

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

Outros recursos

Projetando e criando soluções do Office

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