Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este passo a passo demonstra como chamar um método numa personalização ao nível do documento para o Microsoft Office Excel através do código do Visual Basic for Applications (VBA) na pasta de trabalho. O procedimento envolve três etapas básicas: adicionar um método à Sheet1 classe de item de host, expor o método ao código VBA na pasta de trabalho e, em seguida, chamar o método do código VBA na pasta de trabalho.
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 do Office e tipo de projeto.
Embora este passo a passo use o Excel especificamente, os conceitos demonstrados pelo passo a passo também são aplicáveis a projetos de nível de documento para o Word.
Este passo a passo ilustra as seguintes tarefas:
Criando uma pasta de trabalho que contém código VBA.
Confiar na localização da pasta de trabalho através da Central de Confiabilidade no Excel.
Adicionando um método à classe de
Sheet1item de host.Extraindo uma interface para a classe de item host
Sheet1.Expor o método ao código VBA.
Chamando o método do código VBA.
Observação
Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você tem e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizar o IDE do Visual Studio.
Pré-requisitos
Você precisa dos seguintes componentes para concluir este passo a passo:
Uma edição do Visual Studio que inclui as ferramentas de desenvolvedor do Microsoft Office. Para obter mais informações, consulte Configurar um computador para desenvolver soluções do Office.
Microsoft Excel
Criar uma pasta de trabalho que contenha código VBA
A primeira etapa é criar uma pasta de trabalho habilitada para macro que contenha uma macro VBA simples. Antes de poder expor o código em uma personalização para o VBA, a pasta de trabalho já deve conter o código VBA. Caso contrário, o Visual Studio não pode modificar o projeto VBA para permitir que o código VBA chame o assembly de personalização.
Se você já tiver uma pasta de trabalho que contém o código VBA que deseja usar, ignore esta etapa.
Para criar uma pasta de trabalho que contenha código VBA
Inicie o Excel.
Salve o documento ativo como uma pasta de trabalho do Excel Macro-Enabled (*.xlsm) com o nome WorkbookWithVBA. Salve-o em um local conveniente, como a área de trabalho.
Na Faixa de Opções, clique na guia Desenvolvedor .
Observação
Se a guia Desenvolvedor não estiver visível, você deverá primeiro mostrá-la. Para obter mais informações, consulte Como mostrar a guia do desenvolvedor na faixa de opções.
No grupo Código , clique em Visual Basic.
O Editor do Visual Basic é aberto.
Na janela Projeto , clique duas vezes em ThisWorkbook.
O arquivo de código para o
ThisWorkbookobjeto é aberto.Adicione o seguinte código VBA ao arquivo de código. Este código define uma função simples que não faz nada. O único objetivo dessa função é garantir que um projeto VBA exista na pasta de trabalho. Isso é necessário para etapas posteriores neste passo a passo.
Sub EmptySub() End SubSalve o documento e saia do Excel.
Criar o projeto
Agora pode criar um projeto de nível de documento para o Excel que utiliza a pasta de trabalho habilitada para macros que criou anteriormente.
Para criar um novo projeto
Inicie o Visual Studio.
No menu Arquivo , aponte para Novo e clique em Projeto.
No painel de modelos, expanda Visual C# e, em seguida, expanda Office/SharePoint.
Selecione o nó Suplementos do Office .
Na lista de modelos de projeto, selecione o projeto Pasta de Trabalho do Excel 2010 ou Pasta de Trabalho do Excel 2013 .
Na caixa Nome, digite CallingCodeFromVBA.
Clique em OK.
O Assistente do Projeto de Ferramentas do Visual Studio para Office abre.
Selecione Copiar um documento existente e, na caixa Caminho completo do documento existente , especifique o local da pasta de trabalho WorkbookWithVBA que você criou anteriormente. Se você estiver usando sua própria pasta de trabalho habilitada para macro, especifique o local dessa pasta de trabalho.
Clique em Concluir.
O Visual Studio abre a pasta de trabalho WorkbookWithVBA no designer e adiciona o projeto CallingCodeFromVBA ao Gerenciador de Soluções.
Confiar na localização da pasta de trabalho
Antes de poder expor o código na sua solução ao código VBA na pasta de trabalho, deve confiar que o VBA na pasta de trabalho será executado. Existem várias maneiras de fazer isso. Neste passo a passo, você realizará essa tarefa confiando no local da pasta de trabalho na Central de Confiabilidade no Excel.
Para confiar na localização da pasta de trabalho
Inicie o Excel.
Clique na guia Arquivo .
Clique no botão Opções do Excel .
No painel de categorias, clique em Central de Confiabilidade.
No painel de detalhes, clique em Configurações da Central de Confiabilidade.
No painel de categorias, clique em Locais Confiáveis.
No painel de detalhes, clique em Adicionar novo local.
Na caixa de diálogo Local Confiável do Microsoft Office , navegue até a pasta que contém o projeto CallingCodeFromVBA .
Selecione Subpastas deste local são igualmente confiáveis.
Na caixa de diálogo Local Confiável do Microsoft Office, clique em OK.
Na caixa de diálogo Central de Confiabilidade, clique em OK.
Na caixa de diálogo Opções do Excel, clique em OK.
Saia do Excel.
Adicionar um método à classe Sheet1
Agora que o projeto VBA está configurado, adicione um método público à classe do item de anfitrião Sheet1 que pode ser chamado a partir do código VBA.
Para adicionar um método à classe Sheet1
No Gerenciador de Soluções, clique com o botão direito do mouse em Sheet1.cs e clique em Exibir Código.
O arquivo Sheet1.cs é aberto no Editor de Códigos.
Adicione o seguinte código à
Sheet1classe. OCreateVstoNamedRangemétodo cria um novo NamedRange objeto no intervalo especificado. Esse método também cria um manipulador de eventos para o Selected evento do NamedRange. Mais adiante neste passo a passo, você chamará oCreateVstoNamedRangemétodo do código VBA no 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."); }Adicione o seguinte método à
Sheet1classe. Esse método substitui o GetAutomationObject método para retornar a instância atual daSheet1classe.protected override object GetAutomationObject() { return this; }Aplique os seguintes atributos antes da primeira linha da
Sheet1declaração de classe. 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)]
Extrair uma interface para a classe Sheet1
Antes de poder expor o CreateVstoNamedRange método ao código VBA, você deve criar uma interface pública que define esse método e você deve expor essa interface para COM.
Para extrair uma interface para a classe Sheet1
No arquivo de código Sheet1.cs , clique em qualquer lugar da
Sheet1classe.No menu Refatorar , clique em Extrair Interface.
Na caixa de diálogo Extrair Interface, na caixa Selecionar membros públicos para formar interface, clique na entrada do método
CreateVstoNamedRange.Clique em OK.
Visual Studio gera uma nova interface chamada
ISheet1, e modifica aSheet1definição da classe para que ele implementa aISheet1interface. O Visual Studio também abre o arquivo ISheet1.cs no Editor de Códigos.No arquivo ISheet1.cs , substitua a declaração de
ISheet1interface pelo código a seguir. Esse código torna aISheet1interface pública e aplica o 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); }Construa o projeto.
Expor o método ao código VBA
Para expor o CreateVstoNamedRange método ao código VBA na pasta de trabalho, defina a propriedade ReferenceAssemblyFromVbaProject para o Sheet1 elemento de anfitrião como True.
Para expor o método ao código VBA
No Gerenciador de Soluções, clique duas vezes em Sheet1.cs.
O arquivo WorkbookWithVBA é aberto no designer, com Sheet1 visível.
Na janela Propriedades , selecione a propriedade ReferenceAssemblyFromVbaProject e altere o valor para True.
Clique em OK na mensagem exibida.
Construa o projeto.
Chame o método do código VBA
Agora você pode chamar o CreateVstoNamedRange método do código VBA na pasta de trabalho.
Observação
Nesta explicação passo a passo, você adicionará código VBA à pasta de trabalho enquanto depura o projeto. O código VBA que você adicionar a este documento será substituído na próxima vez que você criar o projeto, porque o Visual Studio substitui o documento na pasta de saída de compilação por uma cópia do documento da pasta principal do projeto. Se você quiser salvar o código VBA, você pode copiá-lo para o documento na pasta do projeto. Para obter mais informações, consulte Combinar VBA e personalizações no nível do documento.
Para chamar o método a partir do código VBA
Pressione F5 para executar seu projeto.
Na guia Desenvolvedor , no grupo Código , clique em Visual Basic.
O Editor do Visual Basic é aberto.
No menu Inserir , clique em Módulo.
Adicione o seguinte código ao novo módulo.
Esse código chama o método
CreateTablena assembly de personalização. A macro acessa esse método usando o método globalGetManagedClasspara acessar a classe de item deSheet1host que você expôs ao código VBA. OGetManagedClassmétodo foi gerado automaticamente quando você definiu a propriedade ReferenceAssemblyFromVbaProject 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 SubPressione F5.
Na pasta de trabalho aberta, clique na célula A1 em Sheet1. Verifique se a caixa de mensagem aparece.
Saia do Excel sem guardar as alterações.
Próximos passos
Você pode saber mais sobre como chamar código em soluções do Office do VBA nestes tópicos:
Chame código em um item de hospedeiro numa personalização de Visual Basic a partir do VBA. Esse processo é diferente do processo Visual C#. Para obter mais informações, consulte Passo a passo: Chamar código do VBA em um projeto do Visual Basic.
Executar código num complemento VSTO a partir de VBA. Para obter mais informações, consulte Passo a passo: Chamar código em um suplemento VSTO do VBA.