Passo a passo: Chamar o código do VBA em um projeto do Visual C#
Essa explicação passo a passo demonstra como chamar um método em uma personalização da nível do Microsoft Office Excel de código Visual Basic é VBA Applications () na pasta de trabalho.o procedimento envolve três etapas básicas: adicione um método à classe de item host de Sheet1 , expõe o método para o código de VBA na pasta de trabalho, e então chame o método do código de 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 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.
Embora este passo-a-passo use Excel especificamente, os conceitos demonstrado por passo a passo também são aplicáveis a projetos de nível para a palavra.
Essa explicação passo a passo mostra as seguintes tarefas:
Criando uma pasta de trabalho que contém o código de VBA.
Confiar no local da pasta de trabalho usando confiança centralizar o excel.
Adicionando um método à classe de item host de Sheet1 .
Extraindo uma interface para a classe de item host de Sheet1 .
Expõe o método para o código de VBA.
Chamando o método do código de VBA.
Observação |
---|
Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário Visual Studio nas instruções a seguir.A edição Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Configurações de Visual Studio. |
Pré-requisitos
Para completar este passo-a-passo, são necessários os seguintes componentes:
-
Uma edição do Visual Studio 2012 que inclui o Microsoft Office Developer Tools. Para obter mais informações, consulte [Configurando um computador para desenvolver soluções do Office](bb398242\(v=vs.110\).md).
- Excel 2013 ou Excel 2010.
Criando uma pasta de trabalho que contém o código de VBA
A primeira etapa é criar uma pasta de trabalho habilitado para macro que contém uma macro simples de VBA.Antes de poder expor o código em uma personalização VBA, a pasta de trabalho já deve conter o código de VBA.Caso contrário, o Visual Studio não pode alterar o projeto de VBA ativar o código de VBA para chamar no assembly de personalização.
Se você já tiver uma pasta de trabalho que contém o código de VBA que você deseja usar, poderá pular esta etapa.
Para criar uma pasta de trabalho que contém o código de VBA
Início do excel.
Salve o documento ativo como Pasta de trabalho habilitado para macro Excel (*.xlsm) com o nome WorkbookWithVBA.Salve o para um local conveniente, como a área de trabalho.
Em fita, clique na guia de Desenvolvedor .
Observação Se a guia de Desenvolvedor não estiver visível, primeiro você deve mostrar.Para obter mais informações, consulte Como: Mostrar guia desenvolvedor na faixa de opções.
Em o grupo de Código , clique Visual Basic.
O editor do Visual Basic abre.
Em a janela de Projeto , clique duas vezes ThisWorkbook.
O arquivo de código para o objeto de ThisWorkbook abre.
Adicione o seguinte código de VBA para o arquivo de código.Esse código define uma função simples que não faz nada.O único objetivo de essa função é garantir que um projeto de VBA existe na pasta de trabalho.Isso é necessário para etapas posteriores em essa explicação passo a passo.
Sub EmptySub() End Sub
Salve o documento e logout do excel.
Criando o projeto
Agora você pode criar um projeto da nível do excel que usa a pasta de trabalho que habilitado para macro você criou anteriormente.
para criar um novo projeto
Inicie o Visual Studio
No menu File, aponte para New, e em seguida, clique em Project.
Em o painel de modelos, expanda **Visual C#**em seguida, expanda Office/SharePoint.
Selecione o nó de Suplementos do Office .
Em a lista de modelos de projeto, selecione o projeto de Pasta de Trabalho do Excel 2010 ou de Pasta de Trabalho do Excel 2013 .
Em a caixa de Nome , digite CallingCodeFromVBA.
Clique em OK.
Visual Studio Tools para Office Project Wizard Abre.
Copiar um documento existenteSelecione e, em seguida, na caixa de Caminho completo do documento existente , especifica o local da pasta de trabalho de WorkbookWithVBA que você criou anteriormente.Se você estiver usando sua própria pasta de trabalho habilitado para macros, especifique o local da pasta de trabalho em vez de isso.
Clique em Concluir.
Visual Studio abra a pasta de trabalho de WorkbookWithVBA no designer e adiciona o projeto de CallingCodeFromVBA a Gerenciador de Soluções.
Confiar no local da pasta de trabalho
Antes de poder expor o código em sua solução ao código de VBA na pasta de trabalho, você deve confiar VBA na pasta de trabalho para executar.Há várias maneiras para fazer isso.Em essa explicação passo a passo, você realizará esta tarefa confiar no local da pasta de trabalho em Central de Confiabilidade Excel.
Para confiar no local da pasta de trabalho
Início do excel.
Clique na guia de Arquivo .
Clique no botão de Opções do Excel .
Em o painel de categorias, clique Central de Confiabilidade.
Em o painel de detalhes, clique Configurações da Central de Confiabilidade.
Em o painel de categorias, clique Locais Confiáveis.
Em o painel de detalhes, clique Adicionar novo local.
Em a caixa de diálogo de Local Confiável do Microsoft Office , navegue até a pasta que contém o projeto de CallingCodeFromVBA.
As subpastas deste local também são confiáveisSelecione.
Em a caixa de diálogo de Local Confiável do Microsoft Office , clique OK.
Em a caixa de diálogo de Central de Confiabilidade , clique OK.
Em a caixa de diálogo de Opções do Excel , clique OK.
ExcelSaída.
Adicionando um método à classe Sheet1
Agora que o projeto de VBA é configurado, adicione um método público para a classe de item host de Sheet1 que você pode chamar código de VBA.
Para adicionar um método à classe Sheet1
Em Gerenciador de Soluções, clique com o botão direito do mouse Sheet1.cs, clique em Exibir Código.
O arquivo de Sheet1.cs abre na editor de códigos.
Adicione o seguinte código à classe Sheet1:O método de CreateVstoNamedRange cria um novo objeto de NamedRange no intervalo especificado.Esse método também cria um manipulador de eventos para o evento de Selected de NamedRange.Posteriormente em esta explicação passo a passo, você irá chamar o método de CreateVstoNamedRange de código de 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 à classe de Sheet1 .Este método substitui o método de GetAutomationObject para retornar a instância atual da classe de Sheet1 .
protected override object GetAutomationObject() { return this; }
Aplicar os seguintes atributos antes da primeira linha da declaração de classe de Sheet1 .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)]
extraindo uma interface para a classe Sheet1
Antes de poder expor o método de CreateVstoNamedRange para o código de VBA, você deve criar uma interface pública que define esse método, e você deve expor esta interface para COM.
Para extrair uma interface para o Sheet1 classe
Em o arquivo de código de Sheet1.cs , clique em qualquer lugar na classe de Sheet1 .
Em o menu de Refatorar , clique em Extrair interface.
Em a caixa de diálogo de Extrair interface , na caixa de Selecionar membros públicos para formar interface , clique na entrada para o método de CreateVstoNamedRange .
Clique em OK.
Visual Studio gera uma nova interface chamada ISheet1, e altera a definição de classe de Sheet1 de modo que implementa a interface de ISheet1 .Visual Studio também abre o arquivo de ISheet1.cs no editor de códigos.
Em o arquivo de ISheet1.cs , substitua a declaração de interface de ISheet1 com o código a seguir.Este código faz o público de interface de ISheet1 , e aplica o atributo de ComVisibleAttribute para fazer a interface visível COM a.
[System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); }
Crie o projeto.
Expõe o método para o código de VBA
Para expor o método de CreateVstoNamedRange para o código de VBA na pasta de trabalho, defina a propriedade de ReferenceAssemblyFromVbaProject para o item host de Sheet1 a True.
Para expor o método para o código de VBA
Em Gerenciador de Soluções, clique duas vezes Sheet1.cs.
O arquivo de WorkbookWithVBA abre no designer, com o Sheet1 visível.
Em a janela de Propriedades , selecione a propriedade de ReferenceAssemblyFromVbaProject , e altere o valor para True.
Clique OK na mensagem exibida.
Crie o projeto.
Chamando o método do código de VBA
Agora você pode chamar o método de CreateVstoNamedRange de código de VBA na pasta de trabalho.
Observação |
---|
Em essa explicação passo a passo, você adicionará código de VBA para a pasta de trabalho para depurar o projeto.O código de VBA que você adiciona a este documento será substituído na próxima vez que você criar o projeto, como o Visual Studio substitui o documento na pasta de saída de compilação com uma cópia do documento da pasta do projeto.Se você deseja salvar o código de VBA, você pode copiá-los no documento na pasta do projeto.Para obter mais informações, consulte Combinando o VBA e personalizações em nível de documento. |
Para chamar o método do código de VBA
Pressione F5 para executar o seu projeto.
Em a guia de Desenvolvedor , no grupo de Código , clique em Visual Basic.
O editor do Visual Basic abre.
Em o menu de Inserir , clique em Módulo.
Adicione o seguinte código para o novo módulo.
Esse código chama o método de CreateTable no assembly de personalização.A macro este método acessa usando o método global de GetManagedClass para acessar a classe de item host de Sheet1 que você tenha expostos a VBA o código.O método de GetManagedClass foi gerado automaticamente quando você define a propriedade de ReferenceAssemblyFromVbaProject anteriormente em este passo-a-passo.
Sub CallVSTOMethod() Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1 Set VSTOSheet1 = GetManagedClass(Sheet1) Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange") End Sub
Pressione F5.
Em a pasta de trabalho aberto, clique na célula A1 em Plan1.Verifique se a caixa de mensagem aparece.
Sair do excel sem salvar suas alterações.
Próximas etapas
Você pode aprender mais sobre o código de chamada em soluções do Office de VBA de esses tópicos:
Chamar código em um item de host em uma personalização do Visual Basic de VBA.Esse processo é diferente do processo visual C#.Para obter mais informações, consulte Passo a passo: Chamar o código do VBA em um projeto de Visual Basic.
Chamar código em um suplemento ao nível de VBA.Para obter mais informações, consulte Passo a passo: Chamando o código de um suplemento em nível de aplicativo do VBA.
Consulte também
Tarefas
Como: expor um código VBA em um projeto de Visual Basic
Como: expor um código VBA em um projeto do Visual C#
Passo a passo: Chamar o código do VBA em um projeto de Visual Basic