2015-07-20 4 views
1

Я новичок в VBA, и я пытаюсь создать список всех, кто отправил электронное письмо на мою учетную запись Outlook в течение последних 8 часов и поместил их в 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» находится внутри кавычек, что делает его частью строки, а не за пределами котировок, действующих как переменная.

Попробуйте переместить переменную из двойных кавычек и соедините ее с оператором &. Одинарные кавычки должны использоваться, чтобы претендовать на строку даты (это как функция Find его ожидает):

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

Вы сможете легко увидеть разницу, если вы запустите этот код и посмотреть в ближайшем окне:

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

Справочник

+0

Это сработало. Благодаря! – Briana