Como inserir tabela do Excel no Word com VBA
Microsoft Office Microsoft Word Microsoft Microsoft Excel Herói Palavra / / April 29, 2020
Última atualização em
O VBA é uma ferramenta muito poderosa que você pode usar para automatizar muito trabalho entre vários aplicativos do Microsoft Office. Uma atividade comum que você pode automatizar usando o VBA é inserir uma tabela do Excel em um documento do Word.
O Visual Basic for Applications (VBA) é uma ferramenta muito poderosa que você pode usar para automatizar muito trabalho entre vários aplicativos do Microsoft Office. Uma atividade comum que você pode automatizar usando o VBA é inserir uma tabela do Excel em um documento do Word.
Há duas maneiras de você fazer isto. A primeira é automatizar uma cópia e colar diretamente de um intervalo existente do Excel em uma nova tabela em um documento do Word. O segundo é realizar cálculos no Excel, criar uma nova tabela no Word e gravar os resultados na tabela.
Você poderia tentar gravar uma macro para fazer isso, mas as macros só permitem automatizar tarefas dentro do Word. Neste artigo, você aprenderá a escrever código VBA para automatizar essas ações entre o Excel e o Word.
Copie e cole um intervalo do Excel no Word com VBA
Nos dois exemplos, começaremos com uma amostra da planilha do Excel. Esta amostra é uma lista de pedidos de compra para uma variedade de produtos.
Digamos que você queira copiar e colar todo o intervalo de células nesta planilha em um documento do Word. Para fazer isso, você precisará escrever uma função VBA que será executada quando você clicar no botão "Copiar para o Word".
Selecione Desenvolvedor no menu e selecione Inserir do grupo Controles na faixa de opções. Na lista suspensa, selecione o controle Botão em Controles ActiveX.
Em seguida, desenhe o botão de comando no lado direito da folha. Você pode alterar a legenda para “Copiar para o Word” clicando com o botão direito do mouse e selecionando Propriedades. Altere o texto da legenda e você pode usar Fonte para atualizar o tamanho e o estilo da fonte.
Nota: Se você não vê Desenvolvedor no menu do Excel e adicione-o. Selecione Arquivo, Opções, Personalizar fitae selecione Todos os comandos no menu suspenso esquerdo. Então mova Desenvolvedor do painel esquerdo para a direita e selecione OK para finalizar.
Escreva o código VBA de copiar e colar
Agora você está pronto para começar a escrever o código VBA. Para começar, clique duas vezes no novo Copiar para o Word para abrir a janela do editor de código.
Você deve ver uma sub-rotina chamada Commandbutton1_Click (), como mostrado abaixo.
Você deseja copiar cada seção do código abaixo. Antes de começar a codificar, para controlar o Word no seu computador usando o VBA, você precisará habilitar a biblioteca de referência do Microsoft Word.
No editor de código, selecione Ferramentas no menu e selecione Referências. Na lista de referências disponíveis, role para baixo e ative Biblioteca de Objetos do Microsoft Word 16.0.
Selecione OK e você está pronto para começar a codificar. Analisaremos cada seção do código de cada vez para que você entenda o que esse código faz e por quê.
Primeiro, você precisa criar as variáveis e os objetos que manterão o intervalo e permitir controlar o aplicativo Word.
Dim tblRange Como Excel. Alcance
Dim WordApp como Word. Inscrição
Dim WordDoc como Word. Documento
Dim WordTable Como Word. Mesa
A próxima linha de código seleciona um intervalo específico de células e o salva em um objeto de intervalo do Excel no VBA.
Defina tblRange = ThisWorkbook. Planilhas ("Plan1"). Intervalo ("A2: G44")
Em seguida, você deseja verificar se o aplicativo Word já está aberto no computador. Você pode fazer referência ao aplicativo Word usando uma referência especial de "classe" com o comando VBA GetObject para fazer isso. Se o Word ainda não estiver aberto, a próxima linha o iniciará usando a função CreateObject. A linha "On Error Resume Next" impede que qualquer erro da primeira função GetObject (se o Word ainda não estiver aberto) interrompa a execução da próxima linha no programa.
Em Erro Continuar Avançar
Defina WordApp = GetObject (class: = "Word. Inscrição")
Se o WordApp não for nada, defina WordApp = CreateObject (class: = "Word. Inscrição")
Agora que o aplicativo Word foi iniciado, você deseja torná-lo visível ao usuário e ativá-lo para uso.
WordApp. Visible = True
WordApp. Ativar
Em seguida, você deseja criar um novo documento dentro do aplicativo Word.
Defina WordDoc = WordApp. Documentos. Adicionar
Por fim, copie e cole o intervalo de células em uma nova tabela no documento do Word.
tblRange. cópia de
WordDoc. Parágrafos (1). PasteExcelTable _
LinkedToExcel: = False, _
WordFormatting: = Falso, _
RTF: = Falso
As opções na função acima inserirão uma tabela não vinculada usando a formatação de origem do Excel (não a formatação do Word) e não usando o formato rich text.
Por fim, para lidar com intervalos do Excel maiores que o documento, você deve ajustar automaticamente a nova tabela para que ela caiba nas margens do seu novo documento do Word.
Defina WordTable = WordDoc. Mesas (1)
WordTable. AutoFitBehavior (wdAutoFitWindow)
E agora você terminou! Salve o arquivo como um arquivo do Excel habilitado para macro (extensão .xlsm). Feche o editor, salve o arquivo original do Excel novamente e clique no botão de comando para ver seu código em ação!
Gravar resultados do Excel em uma tabela do Word com VBA
Nesta próxima seção, você escreverá o código VBA que executa cálculos sobre valores no Excel e os grava em uma tabela no Word.
Neste exemplo, coletamos 10 linhas de dados, calculamos e gravamos os resultados em uma tabela em um documento do Word. Além disso, a tabela original conterá quatro colunas e o código VBA extrairá as dez primeiras linhas de dados desse intervalo.
Assim como na última seção, analisaremos cada seção de cada vez para que você entenda o que esse código faz e por quê.
Primeiro, crie as variáveis e objetos que armazenam os dados e permitam gravar no aplicativo Word.
Dim tblRange Como Excel. Alcance
Dim WrdRange como o Word. Alcance
Dim WordApp como Word. Inscrição
Dim WordDoc como Word. Documento
Dim WordTable Como Word. Mesa
Dim intRows
Dim intColumns
Dim strDate As String
Dim strItem As String
Dim intUnits como variante
Dim intCost como variante
Dim intTotal como variante
Em seguida, defina o total de colunas e linhas que deseja ler no intervalo do Excel.
intNoOfRows = 10
intNoOfColumns = 5
Repita o mesmo código que a última seção que abrirá o Word, se ainda não estiver aberto.
Em Erro Continuar Avançar
Defina WordApp = GetObject (class: = "Word. Inscrição")
Se o WordApp não for nada, defina WordApp = CreateObject (class: = "Word. Inscrição")
WordApp. Visible = True
WordApp. Ativar
Defina WordDoc = WordApp. Documentos. Adicionar
As próximas quatro linhas criam uma tabela dentro desse documento do Word recém-aberto.
Defina WrdRange = WordDoc. Intervalo (0, 0)
WordDoc. Tabelas. Adicione WrdRange, intNoOfRows, intNoOfColumns
Defina WordTable = WordDoc. Mesas (1)
WordTable. Fronteiras. Ativar = Verdadeiro
Por fim, o seguinte loop executará essas ações:
- Para cada linha, coloque a data, o item, as unidades e o custo do pedido em variáveis
- Calcular o custo unitário dos tempos (venda total) e armazenar em uma variável
- Para cada coluna, escreva os valores na tabela do Word, incluindo a venda total calculada na última célula
- Passe para a próxima linha e repita o procedimento acima
Veja como esse código se parece:
Para i = 1 Para intNoOfRows
Para j = 1 Para intNoOfColumns
Se j = 1 Então
strDate = tblRange. Células (i + 1, j) .Valor
strItem = tblRange. Células (i + 1, j + 1) .Valor
intUnits = Val (tblRange. Células (i + 1, j + 2) .Valor)
intCost = Val (tblRange. Células (i + 1, j + 3) .Valor)
intTotal = intUnits * intCost
Fim se
Selecione Caso j
O caso é = 1
WordTable. Célula (i, j). Text = strDate
O caso é = 2
WordTable. Célula (i, j). Text = strItem
O caso é = 3
WordTable. Célula (i, j). Text = intUnits
O caso é = 4
WordTable. Célula (i, j). Texto = intCost
O caso é = 5
WordTable. Célula (i, j). Texto = intTotal
Caso Else
Finalizar seleção
Próximo
Próximo
A função “Células” na primeira parte puxa o valores de célula fora do Excel. Células (x, y) significa que extrai o valor da célula na linha x e na coluna y.
A função “Célula” na última parte grava nas células da tabela do Word, usando as mesmas atribuições de linha e coluna.
Depois de salvar e executar esse código VBA, você verá os resultados no seu documento do Word recém-criado.
Como você pode ver, não é muito complicado criar alguma automação útil entre o Excel e o Word. É apenas uma questão de entender como funcionam os vários "objetos" que podem criar e controlar os aplicativos Excel e Word no seu computador.