2015-07-20 56 views
1

我是VBA的新手,我試圖生成在過去8小時內向我的Outlook帳戶發送了電子郵件並將其放入senderList的所有人的列表,但右側現在它甚至不會進入我的while循環。我確定它的一個問題.Find("[ReceivedTime] > checkTime"),但我不知道該如何檢查。任何幫助表示讚賞。VBA:生成電子郵件發件人列表

Dim myNameSpace As Outlook.NameSpace 
Dim myInbox As Outlook.Folder 
Dim myFolder As Outlook.Folder 
Dim myItems As Outlook.Items 
Dim myItem As Object 
Dim senderList As String 
Dim checkTime As String 

checkTime = Format(Now - 0.3, "ddddd h:nn AMPM") 

Set myNameSpace = Application.GetNamespace("MAPI") 
Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox) 
Set myFolder = myInbox.Folders("Daily Logs") 
Set myItems = myFolder.Items 

Set myItem = myItems.Find("[ReceivedTime] > checkTime") 

While TypeName(myItem) <> "Nothing" 
    senderList = senderList & myItem.SenderName 
    Set myItem = myItems.FindNext 
Wend 

回答

0

find子句需要比較一個時間,但正如它所寫的那樣,它比較文本「checktime」。

這是因爲「checktime」位於引號內部,使其成爲字符串的一部分,而不是作爲變量的引號之外。

嘗試將變量移出雙引號,並將其與&運算符連接起來。單引號應使用限定日期字符串(這是查找功能如何期望它):

Set myItem = myItems.Find("[ReceivedTime] > '" & checkTime & "'") 

你就能很容易地看到區別,如果你運行該代碼,並期待在不久的窗口:

Debug.Print "[ReceivedTime] > checkTime" 
Debug.Print "[ReceivedTime] > '" & checkTime & "'" 

參考

+0

這工作。謝謝! – Briana