Compartilhar via


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

Esta explicação passo a passo demonstra como chamar um método em uma personalização em nível de documento do Excel de Microsoft Office de Visual Basic for Applications o código VBA () na pasta de trabalho. O procedimento envolve três etapas básicas: Adicionar um método para o Sheet1 classe de item de host, expor o método do código do VBA da pasta de trabalho e então chamar o método do código do VBA na pasta de trabalho.

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.

Embora este passo a passo usa o Excel especificamente, os conceitos demonstrados pela explicação também são aplicáveis aos projetos de nível de documento do Word.

This walkthrough illustrates the following tasks:

  • Criar uma pasta de trabalho que contém o código do VBA.

  • Confiando o local da pasta de trabalho usando a Central de confiabilidade no Excel.

  • Adicionando um método para o Sheet1 classe. item de host

  • Extraindo uma interface para o Sheet1 classe. item de host

  • Expondo o método para o código do VBA.

  • Chamando o método do código do VBA.

ObservaçãoObservação

Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. The Visual Studio edition that you have and the settings that you use determine these elements. For more information, see Trabalhando com configurações.

Pré-requisitos

You need the following components to complete this walkthrough:

-

Uma edição do Visual Studio 2010 que inclua as ferramentas de desenvolvedor do Microsoft Office. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.100\).md).
  • Excel 2007 ou Excel 2010.

Criar uma pasta de trabalho que contém o código do VBA

A primeira etapa é criar uma pasta de trabalho habilitado para macro que contenha uma macro do VBA simple. Antes de você pode expor o código uma personalização de VBA, a pasta de trabalho já deve conter o código do VBA. Caso contrário, o Visual Studio não pode modificar o projeto do VBA para ativar o código do VBA chamar o assembly de personalização.

Se você já tiver uma pasta de trabalho que contenha código VBA que você deseja usar, você pode ignorar esta etapa.

Para criar uma pasta de trabalho que contém o código do VBA

  1. Inicie o Excel.

  2. Salvar o documento ativo como um O trabalho de Excel Macro-Enabled (*.xlsm) com o nome WorkbookWithVBA. Salve-o em um local conveniente, como, por exemplo, a área de trabalho.

  3. Na faixa de opções, clique no Developer guia.

    ObservaçãoObservação

    Se o Developer guia não estiver visível, você deve primeiro mostrá-lo. For more information, see Como: Mostrar guia desenvolvedor na faixa de opções.

  4. No código de grupo, clique em Visual Basic.

    O Editor de Visual Basic é aberto.

  5. No projeto janela, clique duas vezes em ThisWorkbook.

    O arquivo de código para o ThisWorkbook objeto será aberta.

  6. Adicione o seguinte código do VBA para o arquivo de código. Esse código define uma função simples que não faz nada. A única finalidade desta função é garantir a existência de um projeto VBA da pasta de trabalho. Isso é necessário para etapas posteriores nesta explicação.

    Sub EmptySub()
    End Sub
    
  7. Salve o documento e saia do Excel.

Creating the Project

Agora você pode criar um projeto de nível de documento para o Excel usa a pasta de trabalho habilitado para macro criado anteriormente.

Para criar um novo projeto.

  1. Start Visual Studio.

  2. On the File menu, point to New, and then click Project.

  3. No painel templates, expanda **Visual C#**e em seguida, expanda Office.

  4. Selecione o 2010 ou 2007 nó.

  5. Na lista de modelos de projeto, selecione o Pasta de trabalho do Excel project.

  6. No nome caixa, digite CallingCodeFromVBA.

  7. Click OK.

    O Visual Studio Tools for Office Project Wizard abre.

  8. Selecione Copiar um documento existentee, no um caminho completo do documento existente , especifique o local da WorkbookWithVBA pasta de trabalho que você criou anteriormente. Se você estiver usando sua própria pasta de trabalho habilitado para macro, especifique o local da pasta de trabalho, em vez disso.

  9. Click Finish.

    Visual StudioAbre a WorkbookWithVBA a pasta de trabalho no designer e adiciona a CallingCodeFromVBA de projeto para Solution Explorer.

Confiando o local da pasta de trabalho

Antes de você pode expor o código em sua solução ao código do VBA da pasta de trabalho, você deve confiar em VBA da pasta de trabalho para executar. Há várias maneiras de fazer isso. Nesta explicação, você realizará essa tarefa por confiar a localização da pasta de trabalho na Trust Center no Excel.

Para confiar no local da pasta de trabalho

  1. Inicie o Excel.

  2. Clique o arquivo guia (para Excel 2010) ou o Botão de Microsoft Office (para o Excel 2007).

  3. Clique o Opções do Excel botão.

  4. No painel de categorias, clique em Trust Center.

  5. No painel de detalhes, clique em Configurações da Central de confiabilidade.

  6. No painel de categorias, clique em Locais confiáveis.

  7. No painel de detalhes, clique em Adicionar novo local.

  8. No Local confiável do Microsoft Office caixa de diálogo, navegue até a pasta que contém o projeto CallingCodeFromVBA.

  9. Selecione as subpastas deste local são confiáveis também.

  10. No Local confiável do Microsoft Office caixa de diálogo, clique em OK.

  11. No Trust Center caixa de diálogo, clique em OK.

  12. No Opções do Excel caixa de diálogo, clique em OK.

  13. Sair Excel.

A adição de um método à classe Sheet1

Agora que o projeto VBA estiver configurado, adicionar um método público para o Sheet1 classe de item de host que podem ser chamados a partir do código do VBA.

Para adicionar um método na classe de Sheet1

  1. Em Solution Explorer, com o botão direito Sheet1.cse em seguida, clique em Exibir código.

    O Sheet1.cs arquivo é aberto no Editor de código.

  2. Add the following code to the Sheet1 class. O CreateVstoNamedRange método cria uma nova NamedRange o objeto no intervalo especificado. Esse método também cria um manipulador de eventos para o Selected o evento da NamedRange. Posteriormente neste passo a passo, você chamará o CreateVstoNamedRange método do código do VBA do documento.

    private Microsoft.Office.Tools.Excel.NamedRange namedRange1;
    
    public void CreateVstoNamedRange(Excel.Range range, string name)
    {
        if (!this.Controls.Contains(name))
        {
            namedRange1 = this.Controls.AddNamedRange(range, name);
            namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler(
                    namedRange1_Selected);
        }
        else
        {
            MessageBox.Show("A named range with this specific name " +
                "already exists on the worksheet.");
        }
    }
    
    private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target)
    {
        MessageBox.Show("This named range was created by Visual Studio " +
            "Tools for Office.");
    }
    
  3. Adicione o seguinte método para o Sheet1 classe. Esse método substitui a GetAutomationObject() método para retornar a instância atual da Sheet1 classe.

    protected override object GetAutomationObject()
    {
        return this;
    }
    
  4. Aplicar os seguintes atributos antes da primeira linha do Sheet1 declaração de classe. 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)]
    

Extraindo uma Interface para a classe de Sheet1

Antes de você pode expor o CreateVstoNamedRange método para o código VBA, você deve criar uma interface pública que define este método, e você deve expor esta interface para COM.

Para extrair uma interface para a classe de Sheet1

  1. No Sheet1.cs o arquivo de código, clique em qualquer lugar do Sheet1 classe.

  2. Sobre o Refactor menu, clique em Extrair Interface.

  3. No Extrair Interface na caixa a Selecionar membros públicos para formar interface caixa, clique na entrada para o CreateVstoNamedRange método.

  4. Click OK.

    Visual Studiogera uma nova interface chamada ISheet1, e modifica a definição da Sheet1 de classe para que ele implementa o ISheet1 interface. Visual Studiotambém abre a ISheet1.cs o arquivo no Editor de código.

  5. No ISheet1.cs de arquivo, substitua o ISheet1 a declaração de interface com o código a seguir. Este código faz o ISheet1 interface pública e ele se aplica a ComVisibleAttribute atributo para tornar a interface visível para com.

    [System.Runtime.InteropServices.ComVisible(true)]
    public interface ISheet1
    {
        void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name);
    }
    
  6. Build the project.

Expor o método para o código do VBA

Para expor o CreateVstoNamedRange método ao código do VBA da pasta de trabalho, defina a ReferenceAssemblyFromVbaProject propriedade para o Sheet1 o item de host para True.

Para expor o método para o código do VBA

  1. Em Solution Explorer, clique duas vezes em Sheet1.cs.

    O WorkbookWithVBA arquivo abre no designer, Sheet1 visível.

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

  3. Clique em OK na mensagem que é exibida.

  4. Build the project.

Chamando o método de código do VBA

Agora, você pode chamar o CreateVstoNamedRange método do código do VBA na pasta de trabalho.

ObservaçãoObservação

Esta explicação passo a passo, você irá adicionar código do VBA para a pasta de trabalho durante a depuração do projeto. O código do VBA que você adicionar a este documento será substituído na próxima vez que você constrói o projeto como Visual Studio substitui o documento na pasta de saída de compilação com uma cópia do documento da pasta do projeto principal. Se desejar salvar o código do VBA, você pode copiá-lo para o documento na pasta do projeto. For more information, see Código de chamada personalizações em nível de documento do VBA.

Para chamar o método do código do VBA

  1. Pressione F5 para executar seu projeto.

  2. No Developer tab, o código de grupo, clique em Visual Basic.

    O Editor de Visual Basic é aberto.

  3. Sobre o Inserir menu, clique em módulo de.

  4. Adicione o seguinte código para o novo módulo.

    Este código chama o CreateTable método no assembly de personalização. A macro acessa esse método, usando o modelo global da GetManagedClass método para acessar o Sheet1 classe de item de host que você expostas ao código do VBA. O GetManagedClass método gerado automaticamente quando você definir a ReferenceAssemblyFromVbaProject propriedade anteriormente nesta explicação passo a passo.

    Sub CallVSTOMethod()
        Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1
        Set VSTOSheet1 = GetManagedClass(Sheet1)
        Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange")
    End Sub
    
  5. Press F5.

  6. Pasta de trabalho aberta, clique na célula A1 em Sheet1. Verifique se a caixa de mensagem aparece.

  7. Saia do Excel sem salvar as alterações.

Próximas etapas

Você pode aprender mais sobre o código de chamada em soluções do Office do VBA nestes tópicos:

Consulte também

Tarefas

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

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

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

Outros recursos

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

Programação personalizações em nível de documento