我正在嘗試從 Outlook 中提取一封電子郵件并獲取該電子郵件中附加的 excel 表。代碼作業正常,除了我無法理解如何讓 VBA 代碼只抓取今天的電子郵件,否則它會不斷抓取前幾天的電子郵件并使用當前日期保存大量檔案。
這是我的代碼:
Sub ExportOutlookTableToExcel()
Dim oLookInspector As Inspector
Dim oLookMailitem As MailItem
Dim oLookWordDoc As Word.Document
Dim oLookWordTbl As Word.Table
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlWrkSheet As Excel.Worksheet
'Grab Email Item
Set oLookMailitem = Application.ActiveExplorer.CurrentFolder.Items("Apples Sales")
Set oLookInspector = oLookMailitem.GetInspector
Set oLookWordDoc = oLookInspector.WordEditor
'Create a New Excel App
Set xlApp = New Excel.Application
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add
Set xlWrkSheet = xlBook.Worksheets.Add
Set oLookWordTbl = oLookWordDoc.Tables(2)
oLookWordTbl.Range.Copy
xlWrkSheet.Paste Destination:=xlWrkSheet.Range("A1")
xlBook.SaveAs FileName:="xxx" & Format(Now, "yyyy-mm-dd") & ".xlsx"
End Sub
uj5u.com熱心網友回復:
您需要先對Items集合進行排序,然后抓取第一個匹配項:
set folder = Application.ActiveExplorer.CurrentFolder
set items = fodler.Items
items.Sort "ReceivedTime", true 'sort in descending order
set oLookMailitem = items.Find("[Subject] = 'Apples Sales'")
if not (oLookMailitem is Null) Then
..
End If
uj5u.com熱心網友回復:
要在 Outlook 中僅查找今天的電子郵件,您可以使用該類的Find/FindNext或Restrict方法Items。在以下文章中閱讀有關這些方法的更多資訊:
- 如何:使用 Find 和 FindNext 方法從檔案夾中檢索 Outlook 郵件專案(C#、VB.NET)
- 如何:使用限制方法從檔案夾中檢索 Outlook 郵件專案
例如,要查找特定日期的專案,您可以在 C# 中使用以下代碼:
private void FindItems(Outlook.MAPIFolder folder)
{
string dateTimeStart = DateTime.Now.ToString("MM/dd/yyyy hh:mm tt");
DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month,
DateTime.Now.Day, 0, 0, 0, 0);
string dateTimeEnd = dt.ToString("MM/dd/yyyy hh:mm tt");
string searchCriteria = "[ReceivedTime]<=\"" dateTimeEnd "\"";
StringBuilder strBuilder = null;
int counter = default(int);
Outlook.MailItem mailItem = null;
Outlook.Items folderItems = null;
object resultItem = null;
try
{
folderItems = folder.Items;
folderItems.Sort("[ReceivedTime]");
if (folderItems.Count > 0)
{
resultItem = folderItems.Find(searchCriteria);
if (resultItem != null)
{
strBuilder = new StringBuilder();
do
{
if (resultItem is Outlook.MailItem)
{
counter ;
mailItem = resultItem as Outlook.MailItem;
strBuilder.AppendLine("#" counter.ToString()
"\tSubject: " appItem.Subject);
}
Marshal.ReleaseComObject(resultItem);
resultItem = folderItems.FindNext();
}
while (resultItem != null);
}
}
if (strBuilder != null)
Debug.WriteLine(strBuilder.ToString());
else
Debug.WriteLine("There is no match in the "
folder.Name " folder.");
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
if (folderItems != null) Marshal.ReleaseComObject(folderItems);
}
}
在 VBA 中,您可以使用Format準備用于 Outlook 搜索條件的日期時間物件的函式:
sFilter = "[ReceivedTime] > '" & Format("12/28/2021 0:00am", "ddddd h:nn AMPM") & "'"
請注意,您可以將搜索字串與任何其他屬性(如Subject行)結合使用。只需AND在搜索字串中使用運算子即可。在字串(用于文本欄位)部分閱讀有關字串運算子的更多資訊。
此外,您可能會發現該類的AdvancedSearch方法Application很有幫助。AdvancedSearch在 Outlook 中使用該方法的主要好處是:
- 搜索在另一個執行緒中執行。您不需要手動運行另一個執行緒,因為該
AdvancedSearch方法會在后臺自動運行它。 - 可以在任何位置搜索任何專案型別:郵件、約會、日歷、筆記等,即超出某個檔案夾的范圍。的
Restrict和Find/FindNext方法可應用于特定的Items集合(見Items所述的屬性Folder類Outlook)中。 - 完全支持 DASL 查詢(自定義屬性也可用于搜索)。您可以在 MSDN的過濾文章中閱讀有關此內容的更多資訊。為了提高搜索性能,如果為商店啟用了即時搜索,則可以使用即時搜索關鍵字(請參閱類的
IsInstantSearchEnabled屬性Store)。 - 您可以隨時使用類的
Stop方法停止搜索程序Search。
在 Outlook 中以編程方式進行高級搜索:C#、VB.NET文章中閱讀有關此方法的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/397059.html
