Compartilhar via


Demonstra Passo a passo: Chamar o código em um aplicativo-nível Adicionar - in do VBA

Se aplica a

As informações contidas neste tópico se aplicam apenas às especificado Ferramentas do Visual Studio para o Office projetos e as versões do Microsoft Office.

Tipo de Projeto

  • Projetos de nível de aplicativo

Versão do Microsoft Office

  • Microsoft Office Sistema de 2007

  • Microsoft Office 2003

For more information, see Recursos disponíveis pelo aplicativo e o tipo de projeto.

Esta explicação passo a passo demonstra como expor um objeto em um nível de aplicativo Adicionar - na Outro soluções do Microsoft Office, incluindo Visual Basic para Applications (VBA) e COM Adicionar-ins.

Embora esta explicação passo a passo Use Excel especificamente, os conceitos demonstrados pelo explicação passo a passo são aplicáveis a qualquer Adicionar - projeto fornecido pelo Ferramentas do Visual Studio para o Office. 

Essa explicação passo a passo ilustra as seguintes tarefas:

  • Definir uma classe que pode ser exposta a Outro soluções do Office.

  • Expor a classe Outro soluções do Office.

  • Chamando um método da classe de código do VBA.

Observação:

Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Configurações do Visual Studio.

Pré-requisitos

Para completar este passo a passo, são necessários os seguintes componentes:

  • Ferramentas do Visual Studio para o Office (um componente opcional do O Visual Studio 2008 Professional e Visual Studio Team System).

  • Microsoft Office Excel 2007.

    Observação:

    Você também pode executar esta explicação passo a passo usando o Microsoft Office Excel 2003.No entanto, alguns das instruções presumem que você está usando a faixa de opções no Excel 2007.

Ferramentas do Visual Studio para o Office é instalado por padrão com as versões listadas do Visual Studio.Para Marcar se ele está instalado, Marcar Instalando o Visual Studio Tools para Office.

Para uma demonstração de vídeo, consulte vídeo como para: Chamar o código em um aplicativo-nível Adicionar - in do VBA.

Criando o Adicionar - projeto

A Primeiro etapa é criar um Adicionar no projeto para o Excel.

Para criar um novo projeto

  • Criar um projeto de suplemento do Excel com o nome ExcelImportData, usando o Excel Adicionar - in modelo de projeto para o Microsoft Office Sistema de 2007.For more information, see Como: Criar o Visual Studio Tools para projetos do Office.

    Visual Studio abre o ThisAddIn.cs ou ThisAddIn.vb arquivo de código e adiciona o projeto de ExcelImportData para Gerenciador de Soluções.

Definir uma classe que você pode expor a Outro soluções do Office

O objetivo desta explicação passo a passo é chamar o método de ImportData de uma classe chamada AddInUtilities na sua Adicionar - in do código do VBA.Este método importa dados para uma Novo planilha da pasta de trabalho Ativo e cria um simples DataSet para conter os dados.

Para expor a classe AddInUtilities Outro soluções do Office, você deve fazer a classe Público e visível para com.Você também deve fornecer uma maneira para expor a interface de IDispatch na classe.O código no procedimento a seguir demonstra uma maneira de atender a esses requisitos.For more information, see Chamar o código no nível de aplicativo Adicionar-ins de Outro soluções do Office.

Para definir uma classe que você pode expor Outro soluções do Office

  1. No menu Project clique em Add Class.

  2. Na caixa de diálogo Add Novo Item , Alterar o nome da Novo classe para AddInUtilitiese clique em Adicionar.

    O arquivo de de AddInUtilities.vb de ou AddInUtilities.cs abre no Editor de código.

  3. Adicionar as seguintes instruções para o início do arquivo.

    Imports System.Data
    Imports System.Runtime.InteropServices
    Imports Excel = Microsoft.Office.Interop.Excel
    
    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. Substituir o Vazio AddInUtilities declaração de classe com o código a seguir.

    Esse código torna a classe AddInUtilities visível a COM, e adiciona o método ImportData à classe.Para expor a interface de IDispatch , a classe AddInUtilities também implementa uma interface que tem o atributo InterfaceIsIDispatch.

    <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
    <System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _
    Public Interface IAddInUtilities
        Sub ImportData()
    End Interface
    
    <System.Runtime.InteropServices.ComVisibleAttribute(True)> _
    <System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)> _
    Public Class AddInUtilities
        Implements IAddInUtilities
    
        Public Sub ImportData() Implements IAddInUtilities.ImportData
    
            ' Create a new DataTable.
            Dim ds As New DataSet()
            Dim dt As DataTable = ds.Tables.Add("Customers")
            dt.Columns.Add(New DataColumn("LastName"))
            dt.Columns.Add(New DataColumn("FirstName"))
    
            ' Add a new row to the DataTable.
            Dim dr As DataRow = dt.NewRow()
            dr("LastName") = "Chan"
            dr("FirstName") = "Gareth"
            dt.Rows.Add(dr)
    
            ' Add a new XML map to the collection.
            Dim activeWorkbook As Excel.Workbook = Globals.ThisAddIn.Application.ActiveWorkbook
            Dim xmlMap1 As Excel.XmlMap = activeWorkbook.XmlMaps.Add(ds.GetXmlSchema(), _
                "NewDataSet")
    
            ' Import the data.
            If Not (xmlMap1 Is Nothing) Then
                Dim lastSheet As Object = activeWorkbook.Sheets(activeWorkbook.Sheets.Count)
                Dim newSheet As Excel.Worksheet = CType(activeWorkbook.Sheets.Add( _
                    After:=lastSheet), Excel.Worksheet)
                newSheet.Name = "Imported Data"
                activeWorkbook.XmlImportXml(ds.GetXml(), xmlMap1, True, _
                    newSheet.Range("A1"))
            End If
        End Sub
    End Class
    
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    [System.Runtime.InteropServices.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IAddInUtilities
    {
        void ImportData();
    }
    
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    [System.Runtime.InteropServices.ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        public void ImportData()
        {
            // Create a new DataTable.
            DataSet ds = new DataSet();
            DataTable dt = ds.Tables.Add("Customers");
            dt.Columns.Add(new DataColumn("LastName"));
            dt.Columns.Add(new DataColumn("FirstName"));
    
            // Add a new row to the DataTable.
            DataRow dr = dt.NewRow();
            dr["LastName"] = "Chan";
            dr["FirstName"] = "Gareth";
            dt.Rows.Add(dr);
    
            // Add a new XML map to the collection.
            Excel.Workbook activeWorkbook = Globals.ThisAddIn.Application.ActiveWorkbook;
            Excel.XmlMap xmlMap1 = activeWorkbook.XmlMaps.Add(ds.GetXmlSchema(), 
                "NewDataSet");
    
            // Import the data.
            if (xmlMap1 != null)
            {
                object lastSheet = activeWorkbook.Sheets[activeWorkbook.Sheets.Count];
                Excel.Worksheet newSheet = (Excel.Worksheet)activeWorkbook.Sheets.Add(
                    System.Type.Missing, lastSheet, 1, System.Type.Missing);
                newSheet.Name = "Imported Data";
    
                activeWorkbook.XmlImportXml(ds.GetXml(), out xmlMap1, true,
                    newSheet.get_Range("A1", System.Type.Missing));
            }
        }
    }
    

Expor a classe Outro soluções do Office

Para expor Outro soluções do Office, a classe AddInUtilities Substituir o método RequestComAddInAutomationService na classe ThisAddIn.Na sua Substituir, retornar uma instância da classe AddInUtilities.

Para expor a classe AddInUtilities Outro soluções do Office

  1. Em Gerenciador de Soluções, Expandira Excel.

  2. Clique com o botão direito do mouse ThisAddIn.cs ou ThisAddIn.vbe, em seguida, clique em Exibir Código.

  3. Adicione o seguinte código à classe ThisAddIn:

    Private utilities As AddInUtilities
    
    Protected Overrides Function RequestComAddInAutomationService() As Object
        If utilities Is Nothing Then
            utilities = New AddInUtilities()
        End If
        Return utilities
    End Function
    
    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. On the menu ComCompilação, clique em Compilar solução.

    Verifique se que a solução compila sem erros.

Teste o Adicionar - no

Você pode chamar na classe AddInUtilities de vários tipos diferentes de soluções do Office.Esta explicação passo a passo, você irá usar código do VBA em uma pasta de trabalho do Excel.Para obter mais informações sobre os outros tipos de soluções do Office que você também pode usar, consulte Chamar o código no nível de aplicativo Adicionar-ins de Outro soluções do Office.

Para testar o Adicionar-in

  1. Pressionarionar F5 para executar seu projeto.

  2. No Excel, Salvar a pasta de trabalho Ativo como uma pasta de trabalho Excel Macro-Habilitado (*.xlsm).Salvar-o em um local conveniente, como a área de trabalho.

  3. Na faixa de opções, clique na guia de De desenvolvedor.

    Observação:

    Se a Guia do desenvolvedor não estiver visível, você primeiro deve mostrá-lo.For more information, see Como: Mostrar a guia Desenvolvedor na Faixa de Opções.

  4. No AAgruparar de De código de , clique em do Visual Basic.

    O Editor do Visual Basic é aberto.

  5. Na janela Projeto , clique Duplo em ThisWorkbook.

    O arquivo de código para o objeto ThisWorkbook é aberto.

  6. Adicionar o seguinte código VBA para o arquivo de código.Primeiro, este código obtém um objeto de COMAddIn que representa o ExcelImportData Adicionar-in.Em seguida, o código usa a propriedade de Object do objeto COMAddIn para chamar o método ImportData.

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationbject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. Pressione F5.

  8. Verifique se que uma Novo planilha de dados importados foi Adicionado para a pasta de trabalho.Também verifique se a célula A1 contém a Cadeia de Caracteres Chane célula B1 contém a Cadeia de Caracteres Gareth.

  9. Excel Sair.

Próximas etapas

Você pode saber mais sobre a programação Adicionar-ins destes tópicos:

Consulte também

Tarefas

Como: Criar o Visual Studio Tools para projetos do Office

Conceitos

Programação Application-Nível Adicionar-ins

Chamar o código no nível de aplicativo Adicionar-ins de Outro soluções do Office

Desenvolvendo soluções do Office

Item de host addIn

Personalizando recursos de interface do usuário usando interfaces de extensibilidade

Arquitetura de nível de aplicativo Adicionar-ins