首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在两个不同的单元格中导出电子邮件体?

如何在两个不同的单元格中导出电子邮件体?
EN

Stack Overflow用户
提问于 2022-08-24 22:25:36
回答 2查看 63关注 0票数 0

我希望按日期范围从特定文件夹导出电子邮件数据。

宏导出收到的日期和电子邮件的正文。

目的是搜索来自提取体的特定数据,并将它们显示在其他行中。

由于Excel在单元格中有32767字符的限制,一些电子邮件的正文没有被完全导出。

是否有一种方法可以将主体导出为两行而不是一行,以避免Excel限制?

对完成这一过程的其他建议表示赞赏。

代码语言:javascript
运行
复制
Sub ImportEmails()

Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Outlook.Namespace
Dim IFolder As Outlook.MAPIFolder
Dim OutlookMail As Variant
Dim i As Integer
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range

Set OutlookApp = New Outlook.Application
'Outlook connection
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
Set wb = ThisWorkbook
'Select the folder to export emails, depending on the user´s folder name you must change it
Set IFolder = OutlookNamespace.GetDefaultFolder(olFolderInbox).Folders("Test")
Set ws = wb.Sheets("Imported")
i = 0

Application.ScreenUpdating = False

ws.Cells.Clear
'Create headers
ws.Range("A1").Value = "Date Time"
ws.Range("B1").Value = "Body"

'Condition to select the today date in case of blank and export the emails
If IsEmpty(Range("end_date").Value) = True Then
    Range("end_date").Value = "=today()"
End If

'Exporting proccedure
For Each OutlookMail In IFolder.Items
    'Date validation
    If DateValue(OutlookMail.ReceivedTime) >= DateValue(Range("start_date")) And DateValue(OutlookMail.ReceivedTime) <= DateValue(Range("end_date")) Then
        'Fill the worksheet cells with the emails
        ws.Range("A2").Offset(i, 0).Value = OutlookMail.ReceivedTime
        ws.Range("B2").Offset(i, 0).Value = OutlookMail.Body
    
        i = i + 1
    End If
Next OutlookMail
Application.ScreenUpdating = True

Set IFolder = Nothing
Set OutlookNamespace = Nothing
Set OutlookApp = Nothing

LRimpr = LastRow(ws)
Set rng = ws.Range("A2:B" & LRimpr)
 
'Sort the columns by newest to oldest using the worksheet last row
With rng
    .Sort Key1:=.Cells(1), Order1:=xlDescending, _
      Orientation:=xlTopToBottom, Header:=xlNo
End With

MsgBox "Emails are successfully imported", vbInformation, "Import complete"
ws.Activate
End Sub
EN

Stack Overflow用户

回答已采纳

发布于 2022-08-25 16:57:00

如果您愿意在一行的多个单元格中导出电子邮件正文,那么请替换您的行。

代码语言:javascript
运行
复制
ws.Range("B2").Offset(i, 0).Value = OutlookMail.Body

使用

代码语言:javascript
运行
复制
Const CHUNK_SIZE As Long = 32000
Dim segment As Long
segment = 0
Do While True
    ws.Range("B2").Offset(i, segment).Value = Mid$(OutlookMail.Body, segment * CHUNK_SIZE + 1, CHUNK_SIZE)
    segment = segment + 1
    If segment * CHUNK_SIZE > Len(OutlookMail.Body) Then Exit Do
Loop

根据您的需求调整CHUNK_SIZE的值..。它控制将放入每个单元格中的字符数,最后一个单元格具有“剩余”字符(如果主体的字符小于CHUNK_SIZE,则控制所有字符)。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73480087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档