Note: The other languages of the website are Google-translated. Back to English

Como exportar tabela de corpo de e-mail para o Excel no Outlook?

Quando você recebe um e-mail que contém algumas tabelas no corpo, às vezes, pode ser necessário exportar todas as tabelas do corpo da mensagem para uma planilha do Excel. Normalmente, você pode copiar e colar as tabelas na planilha, mas, aqui, irei falar sobre um método útil para resolver esse trabalho quando há várias tabelas que precisam ser exportadas.

Exportar todas as tabelas do corpo da mensagem do Outlook para planilha do Excel com código VBA


Exportar todas as tabelas do corpo da mensagem do Outlook para planilha do Excel com código VBA

Aplique o seguinte código VBA para exportar todas as tabelas de um corpo de mensagem para a planilha do Excel.

1. Abra a mensagem de que deseja exportar as tabelas e mantenha pressionado o ALT + F11 chaves para abrir o Microsoft Visual Basic para Aplicações janela.

2. Clique inserção > Móduloe cole o seguinte código no Módulo janela.

Código VBA: exporte todas as tabelas do corpo da mensagem para a planilha do Excel:

Sub ImportTableToExcel()
Dim xMailItem As MailItem
Dim xTable As Word.Table
Dim xDoc As Word.Document
Dim xExcel As Excel.Application
Dim xWb As Workbook
Dim xWs As Worksheet
Dim I As Integer
Dim xRow As Integer
On Error Resume Next
Set xExcel = New Excel.Application
Set xWb = xExcel.Workbooks.Add
xExcel.Visible = True
Set xWs = xWb.Sheets(1)
xRow = 1
For Each xMailItem In Application.ActiveExplorer.Selection
    Set xDoc = xMailItem.GetInspector.WordEditor
    For I = 1 To xDoc.Tables.Count
        Set xTable = xDoc.Tables(I)
        xTable.Range.Copy
        xWs.Paste
        xRow = xRow + xTable.Rows.Count + 1
        xWs.Range("A" & CStr(xRow)).Select
    Next
Next
End Sub

doc exportar tabelas para excel 1

3. Depois de colar o código acima, ainda no Microsoft Visual Basic para Aplicações janela, clique em Ferramentas > Referências para ir para o Referências-Projeto1 caixa de diálogo e verifique Biblioteca de objetos do Microsoft Word e Biblioteca de objetos do Microsoft Excel opções do Referências Disponíveis caixa de lista, veja a captura de tela:

doc exportar tabelas para excel 2

4. Então clique OK botão para sair da caixa de diálogo, e agora, por favor F5 chave para executar o código, todas as tabelas no corpo da mensagem foram exportadas para uma nova pasta de trabalho, como mostrado a seguir:

doc exportar tabelas para excel 3


Kutools for Outlook - traz 100 recursos avançados para o Outlook e torna o trabalho muito mais fácil!

  • Auto CC / BCC por regras ao enviar e-mail; Avanço automático Vários emails por encomenda; Resposta automatica sem servidor Exchange e mais recursos automáticos ...
  • Aviso BCC - mostrar mensagem quando você tentar responder a todos se o seu endereço de e-mail estiver na lista BCC; Lembrar quando houver anexos ausentes, e mais recursos de lembrete ...
  • Responder (todos) com todos os anexos na conversa de correio; Responder muitos e-mails em segundos; Adicionar saudação automaticamente quando responder; Adicionar data ao assunto ...
  • Ferramentas de anexo: gerenciar todos os anexos em todos os e-mails, Desanexação Automática, Comprimir tudo, Renomear tudo, Salvar tudo ... Relatório rápido, Contar e-mails selecionados...
  • Lixo eletrônico poderoso por costume; Remover e-mails e contatos duplicados... Permite que você faça de maneira mais inteligente, rápida e melhor no Outlook.
tiro kutools aba kutools do outlook 1180x121
tiro kutools outlook kutools mais guia 1180x121
 
Comentários (17)
Ainda não há classificações. Seja o primeiro a avaliar!
Este comentário foi feito pelo moderador no site
Isso funciona muito bem! Muito obrigado
Este comentário foi feito pelo moderador no site
Como abrir um e-mail com assunto específico e copiar a tabela em planilha com um nome específico. Por favor ajude.
Este comentário foi feito pelo moderador no site
Precisa de ajuda, VBA para copiar a tabela do Outlook Mail com assunto específico para excel em um local específico

Recebo um e-mail com o assunto "Status de backup hoje" com uma tabela de 2 colunas e 6 linhas na minha caixa de entrada. Tentando escrever um código para abrir o correio e copiar a tabela e colar no excel em um local específico.

Problema: o código funciona bem, sem erro. Mails abre e também abre o arquivo excel. Mas a tabela não é copiada. Por favor, ajude nisso.

Sub Openmail()

Dim xMailItem como variante
Dim olNs As Outlook.NameSpace
Dim olFldr como Outlook.MAPIFolder
Dim olItms As Outlook.Items
Dim xTable As Word.Table
Dim xDoc como Word.document
Dim wordApp como objeto
Dim xExcel como objeto
Dim xWb como pasta de trabalho
Dim xWs como planilha
Escurecer eu enquanto
Dim v Como inteiro
Dim xLinha como inteiro
Dim StrFile$
On Error Resume Next

Definir olApp = Novo Outlook.Application
Definir olNs = olApp.GetNamespace("MAPI")
Definir olFldr = olNs.GetDefaultFolder(olFolderInbox)
Definir olItms = olFldr.Items
Set wordApp = CreateObject("Word.Application")
Set xExcel = CreateObject("Excel.Application")

xLinha = 1
I = 1

Para cada xMailItem em olItms
If Int(xMailItem.ReceivedTime) >= Data Então
If InStr(xMailItem.Subject, "Status de backup hoje") > 0 Then
'xMailItem.Display
Definir xDoc = xMailItem.GetInspector.WordEditor
Para v = 1 Para xDoc.Tables.Count
Definir xTable = xDoc.Tables(v)
xTabela.Intervalo.Copiar
StrFile = "C:\Users\priyanka.jeganathan\OneDrive - Accenture\Accenture\Learning\Daily DashBoard Basesheet.xlsx"
Definir xWb = xExcel.Workbooks.Open(StrFile)
Set xWs = xWb.Worksheets("IRIS Daily")
xWs. Ativar
xWs.Colar
xLinha = xLinha + xTabela.Linhas.Contagem + 1
xWs.Range("A" & CStr(xRow)). Selecione
Seguinte
eu = eu + 1
Se acabar
Se acabar
Próximo xMailItem
xWs.Exibir
xWs.Range("A1:A6").ColumnWidth = 43
xWs.Rows("1:6").RowHeight = 16.5
Definir olFldr = Nada
Definir olNs = Nada
Definir olApp = Nada
End Sub
Este comentário foi feito pelo moderador no site
Preciso de ajuda. Eu sou um novato e tentei o código VBA para copiar a tabela do correio do Outlook com assunto específico para excel em local específico

Diariamente recebo um email com o assunto "Backup Status hoje" e procuro um código para abrir esse email, copio a tabela e colo a tabela no excel em um local específico.

Problema: o código funciona bem, sem erro. O correio é aberto e o Excel é aberto, mas a tabela não é copiada. Não tenho certeza onde eu errei. Por favor ajude.

Sub Openmail()

Dim xMailItem como variante
Dim olNs As Outlook.NameSpace
Dim olFldr como Outlook.MAPIFolder
Dim olItms As Outlook.Items
Dim xTable As Word.Table
Dim xDoc como Word.document
Dim wordApp como objeto
Dim xExcel como objeto
Dim xWb como pasta de trabalho
Dim xWs como planilha
Escurecer eu enquanto
Dim v Como inteiro
Dim xLinha como inteiro
Dim StrFile$
On Error Resume Next

Definir olApp = Novo Outlook.Application
Definir olNs = olApp.GetNamespace("MAPI")
Definir olFldr = olNs.GetDefaultFolder(olFolderInbox)
Definir olItms = olFldr.Items
Set wordApp = CreateObject("Word.Application")
Set xExcel = CreateObject("Excel.Application")

xLinha = 1
I = 1

Para cada xMailItem em olItms
If Int(xMailItem.ReceivedTime) >= Data Então
If InStr(xMailItem.Subject, "Status de backup hoje") > 0 Then
'xMailItem.Display
Definir xDoc = xMailItem.GetInspector.WordEditor
Para v = 1 Para xDoc.Tables.Count
Definir xTable = xDoc.Tables(v)
xTabela.Intervalo.Copiar
StrFile = "C:\Users\priyanka.jeganathan\OneDrive - Accenture\Accenture\Learning\Daily DashBoard Basesheet.xlsx"
Definir xWb = xExcel.Workbooks.Open(StrFile)
Set xWs = xWb.Worksheets("IRIS Daily")
xWs. Ativar
xWs.Colar
xLinha = xLinha + xTabela.Linhas.Contagem + 1
xWs.Range("A" & CStr(xRow)). Selecione
Seguinte
eu = eu + 1
Se acabar
Se acabar
Próximo xMailItem
xWs.Exibir
xWs.Range("A1:A6").ColumnWidth = 43
xWs.Rows("1:6").RowHeight = 16.5
Definir olFldr = Nada
Definir olNs = Nada
Definir olApp = Nada
End Sub
Este comentário foi feito pelo moderador no site
Olá, Blessy,
Caso queira abrir o email com assunto específico e exportar as tabelas do corpo da mensagem para um arquivo Excel, pode ser que o código VBA abaixo possa lhe fazer um favor, tente:

Sub ImportTableToExcelBySubject()
Dim xItem como objeto
Dim xMailItem As MailItem
Dim xTable As Word.Table
Dim xDoc As Word.Document
Dim xExcel As Excel.Application
Dim xWb como pasta de trabalho
Dim xWs como planilha
Dim I como inteiro
Dim xLinha como inteiro
Dim xFileDialog como FileDialog
On Error Resume Next
Se Application.ActiveExplorer.CurrentFolder.Items.Count = 0, então Exit Sub
Definir xExcel = Novo Excel.Application
Definir xFileDialog = xExcel.FileDialog(msoFileDialogFilePicker)
xFileDialog.Filters.Add "Excel Workbook", "*.xls*", 1
Se xFileDialog.Show = 0 Então Exit Sub
Definir xWb = xExcel.Workbooks.Open(xFileDialog.SelectedItems(1))
Definir xWs = xWb.Planilhas(1)
xExcel.DisplayAlerts = Falso
xLinha = 1
Para cada xItem em Application.ActiveExplorer.CurrentFolder.Items
Se xItem.Class = olMail Então
Definir xMailItem = xItem
If InStr(xMailItem.Subject, "Backup Status hoje") > 0 Then 'digite o assunto entre aspas duplas
Definir xDoc = xMailItem.GetInspector.WordEditor
Para I = 1 Para xDoc.Tables.Count
Definir xTable = xDoc.Tables(I)
xTabela.Intervalo.Copiar
xWs.Colar
xLinha = xLinha + xTabela.Linhas.Contagem + 1
xWs.Range("A" & CStr(xRow)). Selecione
Seguinte
xMailItem.Display
Se acabar
Se acabar
Seguinte
xWb.Salvar
xExcel.DisplayAlerts = Verdadeiro
xExcel.Visível = Verdadeiro
End Sub
Este comentário foi feito pelo moderador no site
Obrigado Skyyang. Funciona. Exceto que ele busca todos os e-mails com "Status de backup hoje" no qual quero que esse código seja executado nos e-mails recebidos hoje. Atualizou seu código, mas ainda copia a tabela de todos os e-mails recebidos no passado também. Por favor ajude.


Sub ImportTableToExcelBySubject()
Dim xItem como objeto
Dim xMailItem As MailItem
Dim xTable As Word.Table
Dim xDoc como Word.document
Dim xExcel As Excel.Application
Dim xWb como pasta de trabalho
Dim xWs como planilha
Dim I como inteiro
Dim xLinha como inteiro
Dim xFileDialog como FileDialog
Dim Drt as Date
On Error Resume Next
Se Application.ActiveExplorer.CurrentFolder.Items.Count = 0, então Exit Sub
Definir xExcel = Novo Excel.Application
Definir xFileDialog = xExcel.FileDialog(msoFileDialogFilePicker)
xFileDialog.Filters.Add "Excel Workbook", "*.xls*", 1
Se xFileDialog.Show = 0 Então Exit Sub
Definir xWb = xExcel.Workbooks.Open(xFileDialog.SelectedItems(1))
Definir xWs = xWb.Planilhas(1)
xExcel.DisplayAlerts = Falso
xLinha = 1
Para cada xItem em Application.ActiveExplorer.CurrentFolder.Items
Se xItem.Class = olMail Então
Definir xMailItem = xItem
Drt = xMailItem.ReceivedTime
If Drt <= Date And InStr(xMailItem.Subject, "Backup Status today") > 0 Then 'digite o assunto entre aspas duplas
Definir xDoc = xMailItem.GetInspector.WordEditor
Para I = 1 Para xDoc.Tables.Count
Definir xTable = xDoc.Tables(I)
xTabela.Intervalo.Copiar
xWs.Colar
xLinha = xLinha + xTabela.Linhas.Contagem + 1
xWs.Range("A" & CStr(xRow)). Selecione
Seguinte
xMailItem.Display
Se acabar
Se acabar
Seguinte
xWb.Salvar
xExcel.DisplayAlerts = Verdadeiro
xExcel.Visível = Verdadeiro
End Sub
Este comentário foi feito pelo moderador no site
Olá, Blessy

Caso precise apenas importar as tabelas com assunto específico, deverá aplicar o código VBA abaixo. Primeiro, você precisa selecionar o e-mail com o assunto desejado e, em seguida, executar este código. Tente por favor.

Sub ImportTableToExcelBySubject()
Dim xMailItem As MailItem
Dim xTable As Word.Table
Dim xDoc As Word.Document
Dim xExcel As Excel.Application
Dim xWb como pasta de trabalho
Dim xWs como planilha
Dim I como inteiro
Dim xLinha como inteiro
Dim xFileDialog como FileDialog
On Error Resume Next
Definir xExcel = Novo Excel.Application
Definir xFileDialog = xExcel.FileDialog(msoFileDialogFilePicker)
xFileDialog.Filters.Add "Excel Workbook", "*.xls*", 1
Se xFileDialog.Show = 0 Então Exit Sub
Definir xWb = xExcel.Workbooks.Open(xFileDialog.SelectedItems(1))
Definir xWs = xWb.Planilhas(1)
xExcel.DisplayAlerts = Falso
xLinha = 1
Para cada xMailItem em Application.ActiveExplorer.Selection
If InStr(xMailItem.Subject, "Status de backup hoje") > 0 Then
Definir xDoc = xMailItem.GetInspector.WordEditor
Para I = 1 Para xDoc.Tables.Count
Definir xTable = xDoc.Tables(I)
xTabela.Intervalo.Copiar
xWs.Colar
xLinha = xLinha + xTabela.Linhas.Contagem + 1
xWs.Range("A" & CStr(xRow)). Selecione
Seguinte
Se acabar
Seguinte
xWb.Salvar
xExcel.DisplayAlerts = Verdadeiro
xExcel.Visível = Verdadeiro
End Sub
Este comentário foi feito pelo moderador no site
Obrigado, Skyyang por sua resposta. Todo o meu objetivo é executar o código no Outlook VBA para que ele procure e-mails recebidos na "data atual", em outras palavras, "hoje" com o assunto "Status de backup hoje" e copie a tabela desse e-mail para o Excel em formato tabular. Por favor, ajudem nisso.. em vez de selecionarmos esse e-mail, deixe o código selecionar o e-mail e copie o conteúdo para o excel. Há algum caminho... ? Por favor me ajude, isso vai salvar meu dia.
Este comentário foi feito pelo moderador no site
Qual biblioteca de referência/objeto precisa ser ativada no Excel? Na verdade, sou novo em VBA e aprendendo.
Este comentário foi feito pelo moderador no site
Encontrei um bug com isso que não consegui resolver.

Se eu selecionar dois emails, um com uma única tabela e outro com três tabelas, e executar o código, o Outlook falha. Mas notei que é muito específico para a ordem em que os e-mails são selecionados inicialmente.

1. Por exemplo, se eu clicar primeiro no e-mail com as três tabelas e depois clicar com a tecla Ctrl pressionada no e-mail com uma tabela, o código será executado sem erros.

2. Se eu fizer o nº 1 primeiro, selecione novamente os e-mails, desta vez clique no e-mail com uma tabela e, em seguida, clique com a tecla Ctrl pressionada no e-mail com três tabelas, ele também será executado sem erro

3. Agora, se eu fechar e reiniciar o Outlook e clicar primeiro no e-mail com uma tabela e, em seguida, clicar com a tecla Ctrl pressionada no e-mail com três tabelas, o Outlook trava.

Eu também noto que quando ele trava, ele faz isso depois de copiar/colar a segunda tabela e antes de fazer a terceira. Na verdade, ele nem chega ao 'For I = 1 To xDoc.Tables.Count' para obter a terceira tabela.

As tabelas são 43 linhas e 7 colunas. Não há outro texto nos e-mails e removi todos os dados das tabelas, portanto, não está relacionado aos dados neles. Eu tentei linhas removidas e em algum momento ele começará a funcionar, mas não tenho certeza do que isso está me dizendo.

Alguém sabe por que isso está acontecendo?
Este comentário foi feito pelo moderador no site
Tenho o mesmo problema aqui. Nenhuma solução ainda, mas pensei em deixar você saber que você não está sozinho.
Este comentário foi feito pelo moderador no site
Mesmo problema aqui também. Eu tentei definir os objetos para nada dentro de cada loop, mas ainda não está funcionando.
Este comentário foi feito pelo moderador no site
Este código VBA não está funcionando para mim ... depois de executar não sendo exportado no excel
Este comentário foi feito pelo moderador no site
Inclusive recebo muitos e-mails com assunto específico que quero extrair essas tabelas nesse e-mail... preciso de ajuda
Este comentário foi feito pelo moderador no site
Olá, arshad,
Pretende exportar todas as tabelas das mensagens com o mesmo assunto para uma planilha?
Este comentário foi feito pelo moderador no site
Olá, recebo um e-mail de hora em hora com uma tabela que preciso enviar automaticamente para uma planilha em uma pasta, esse código acima serve para isso?
Este comentário foi feito pelo moderador no site
preciso extrair uma tabela de dados que recebo a cada hora para um arquivo salvo

isso não funciona para mim
Não há comentários postados aqui ainda
Deixe o seu comentário
Postando como convidado
×
Avalie esta postagem:
0   Personagens
Locais sugeridos