Como adicionar dinamicamente e executar uma macro VBA a partir do Visual Basic

Traduções deste artigo Traduções deste artigo
ID do artigo: 219905 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Quando o produto um utomating um Office a partir do Visual Basic, pode ser útil mover parte do código em um Microsoft Visual Basic for Applications (VBA) módulo que pode ser executado dentro do espaço de processo do servidor. Isso pode aumentar a velocidade de execução geral para o seu aplicativo e ajudar a aliviar problemas se o servidor somente executa uma ação quando uma chamada é feita em processo.

Este artigo demonstra como adicionar dinamicamente um módulo VBA a um aplicativo do Office em execução a partir do Visual Basic e, em seguida, chamar a macro para preencher um planilha em processo.

Mais Informações

O exemplo seguinte demonstra inserindo um módulo de código no Microsoft Excel, mas você pode usar a mesma técnica para Word e PowerPoint porque ambos incorporam o mesmo mecanismo do VBA.

O exemplo usa um arquivo de texto estático para o módulo de código que é inserido no Excel. Talvez você queira mover o código em um arquivo de recurso que você pode compilar em seu aplicativo e, em seguida, extrair para um arquivo temporário quando necessário em tempo de execução. Isso tornaria o projeto mais gerenciável para redistribuição.

Iniciando com o Microsoft Office XP, um usuário deve conceder acesso ao modelo de objeto VBA antes de qualquer código de automação escrito para manipular o VBA não funcionarão. Esse é um novo recurso de segurança com o Office XP. Para obter mais informações, consulte o seguinte artigo da base de dados de Conhecimento da:
282830Acesso programático ao projeto VBA do Office XP negado

Etapas para criar o exemplo

  1. Primeiro, crie um novo arquivo de texto chamado KbTest.bas (sem a extensão .txt). Isso é o módulo de código que nós serão inseridos no Excel em tempo de execução.
  2. No arquivo texto, adicione as linhas de código a seguir:
       Attribute VB_Name = "KbTest"
    
       ' Your Microsoft Visual Basic for Applications macro function takes 1 
       ' parameter, the sheet object that you are going to fill.
    
       Public Sub DoKbTest(oSheetToFill As Object)
          Dim i As Integer, j As Integer
          Dim sMsg As String
          For i = 1 To 100
             For j = 1 To 10
    
                sMsg = "Cell(" & Str(i) & "," & Str(j) & ")"
                oSheetToFill.Cells(i, j).Value = sMsg
             Next j
          Next i
       End Sub
    					
  3. Salve o arquivo de texto para o diretório C:\KbTest.bas e feche o arquivo.
  4. Inicie o Visual Basic e crie um projeto padrão. O Form1 é criado por padrão.
  5. No menu Project , clique em referências e, em seguida, selecione a versão de biblioteca de tipo apropriado que lhe permite usar ligação inicial para o Excel.

    Por exemplo, selecione um destes procedimentos:
    • Para o Microsoft Excel 2007, selecione a biblioteca 12.0.
    • Para o Microsoft Excel 2003, selecione a biblioteca 11.0.
    • Para o Microsoft Excel 2002, selecione a biblioteca de 10.0.
    • Para o Microsoft Excel 2000, selecione a biblioteca 9.0.
    • Para o Microsoft Excel 97, selecione a biblioteca 8.0.
  6. Adicione um botão ao Form1 e coloque o código a seguir no manipulador para o evento Click do botão:
       Private Sub Command1_Click()
          Dim oXL As Excel.Application
          Dim oBook As Excel.Workbook
          Dim oSheet As Excel.Worksheet
          Dim i As Integer, j As Integer
          Dim sMsg As String
          
        ' Create a new instance of Excel and make it visible.
          Set oXL = CreateObject("Excel.Application")
          oXL.Visible = True
       
        ' Add a new workbook and set a reference to Sheet1.
          Set oBook = oXL.Workbooks.Add
          Set oSheet = oBook.Sheets(1)
          
        ' Demo standard Automation from out-of-process,
        ' this routine simply fills in values of cells.
          sMsg = "Fill the sheet from out-of-process"
          MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground
          
          For i = 1 To 100
             For j = 1 To 10
                sMsg = "Cell(" & Str(i) & "," & Str(j) & ")"
                oSheet.Cells(i, j).Value = sMsg
             Next j
          Next i
          
        ' You're done with the first test, now switch sheets
        ' and run the same routine via an inserted Microsoft Visual Basic 
        ' for Applications macro.
          MsgBox "Done.", vbMsgBoxSetForeground
          Set oSheet = oBook.Sheets.Add
          oSheet.Activate
          
          sMsg = "Fill the sheet from in-process"
          MsgBox sMsg, vbInformation Or vbMsgBoxSetForeground
          
        ' The Import method lets you add modules to VBA at
        ' run time. Change the file path to match the location
        ' of the text file you created in step 3.
          oXL.VBE.ActiveVBProject.VBComponents.Import "C:\KbTest.bas"
       
        ' Now run the macro, passing oSheet as the first parameter
          oXL.Run "DoKbTest", oSheet
          
        ' You're done with the second test
          MsgBox "Done.", vbMsgBoxSetForeground
          
        ' Turn instance of Excel over to end user and release
        ' any outstanding object references.
          oXL.UserControl = True
          Set oSheet = Nothing
          Set oBook = Nothing
          Set oXL = Nothing
          
       End Sub
    					
  7. Para Excel 2002 e versões posteriores do Excel, você deve ativar acesso o projeto VBA. Para fazer isso, use um dos seguintes métodos:
    • No Excel 2007, clique no Botão Microsoft Office e, em seguida, em Opções do Excel . Em Central de confiabilidade e clique em Configurações da Central de confiabilidade . Clique em Configurações de macro , clique para selecionar a caixa de seleção Confiar no acesso ao modelo de objeto de projeto do VBA e, em seguida, clique em OK duas vezes.
    • No Excel 2003 e em versões anteriores do Excel, aponte para macro no menu Ferramentas e, em seguida, clique em segurança . Na caixa de diálogo segurança , clique na guia Fontes confiáveis e, em seguida, clique para selecionar a caixa de seleção Confiar no acesso ao projeto do Visual Basic .
  8. Execute o projeto Visual Basic.

Referências

Para obter mais informações sobre automação do Office a partir do Visual Basic, consulte o site de suporte de desenvolvimento do Office no seguinte endereço:
http://support.microsoft.com/ofd

Propriedades

ID do artigo: 219905 - Última revisão: terça-feira, 27 de março de 2007 - Revisão: 5.1
A informação contida neste artigo aplica-se a:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Office Professional 2007
  • Microsoft Office Standard 2007
  • Microsoft Office Professional Edition 2003
  • Microsoft Office Standard Edition 2003
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
Palavras-chave: 
kbmt kbexpertisebeginner kbautomation kbhowto KB219905 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 219905

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com