【发布时间】:2022-08-20 11:14:40
【问题描述】:
我有直接从共享文件夹的收件箱中提取的代码。
我需要它从子文件夹中提取。
例如:
共享文件夹 X
-收件箱
--子文件夹
另外,我想只提取每封电子邮件的前两行,而不是拖入整个电子邮件链。
以下代码从共享收件箱中提取。
Sub GetEmails()
\'Add Tools->References->\"Microsoft Outlook nn.n Object Library\"
\'nn.n varies as per our Outlook Installation
Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Variant
Dim i As Integer
Dim Folder As Outlook.MAPIFolder
Dim sFolders As Outlook.MAPIFolder
Dim iRow As Integer, oRow As Integer
Dim strMailboxName As String
Dim Pst_Folder_Name As String
strMailboxName = \"Shared Email Box\"
\'Mailbox or PST Main Folder Name (As how it is displayed in your Outlook Session)
strMailboxName = \"Shared Email Box\"
\'Mailbox Folder or PST Folder Name (As how it is displayed in your Outlook Session)
Pst_Folder_Name = \"Inbox\" \'Sample \"Inbox\" or \"Sent Items\"
\'To directly a Folder at a high level
\'Set Folder = Outlook.Session.Folders(MailBoxName).Folders(Pst_Folder_Name)
\'To access a main folder or a subfolder (level-1)
For Each Folder In Outlook.Session.Folders(strMailboxName).Folders
If VBA.UCase(Folder.Name) = VBA.UCase(Pst_Folder_Name) Then GoTo Label_Folder_Found
For Each sFolders In Folder.Folders
If VBA.UCase(sFolders.Name) = VBA.UCase(Pst_Folder_Name) Then
Set Folder = sFolders
GoTo Label_Folder_Found
End If
Next sFolders
Next Folder
Label_Folder_Found:
If Folder.Name = \"\" Then
MsgBox \"Invalid Data in Input\"
GoTo End_Lbl1:
End If
\'Read Through each Mail and export the details to Excel for Email Archival
ThisWorkbook.Sheets(1).Activate
Folder.Items.Sort \"Received\"
\'Insert Column Headers
ThisWorkbook.Sheets(1).Cells(1, 1) = \"Sender\"
ThisWorkbook.Sheets(1).Cells(1, 2) = \"Subject\"
ThisWorkbook.Sheets(1).Cells(1, 3) = \"Date\"
ThisWorkbook.Sheets(1).Cells(1, 4) = \"Body\"
\'Export eMail Data from PST Folder to Excel with date and time
oRow = 1
For iRow = 1 To Folder.Items.Count
\'If condition to import mails received in last 18 days
\'To import all emails, comment or remove this IF condition
If VBA.DateValue(VBA.Now) - VBA.DateValue(Folder.Items.Item(iRow).ReceivedTime) <= 18 Then
oRow = oRow + 1
ThisWorkbook.Sheets(1).Cells(oRow, 1).Select
ThisWorkbook.Sheets(1).Cells(oRow, 1) = Folder.Items.Item(iRow).SenderName
ThisWorkbook.Sheets(1).Cells(oRow, 2) = Folder.Items.Item(iRow).Subject
ThisWorkbook.Sheets(1).Cells(oRow, 3) = Folder.Items.Item(iRow).ReceivedTime
ThisWorkbook.Sheets(1).Cells(oRow, 4) = Folder.Items.Item(iRow).Body
End If
Next iRow
MsgBox \"Outlook Mails Extracted to Excel\"
Set Folder = Nothing
Set sFolders = Nothing
End_Lbl1:
End Sub
-
对于前两行,您可以在 vbCrLf(或者可能在 vbLF)上拆分
Body并获取结果数组的前两个元素。或者使用Left()获取前(例如)200 个字符 -
对不起,我对 vba 很陌生。我不知道你刚才说了什么。你能帮我写出来吗?