Outlook Banter

Outlook Banter (http://www.outlookbanter.com/)
-   Outlook and VBA (http://www.outlookbanter.com/outlook-vba/)
-   -   MailItem Find Method question (http://www.outlookbanter.com/outlook-vba/100327-mailitem-find-method-question.html)

Salad February 21st 10 11:28 PM

MailItem Find Method question
 
Using the Find method to find a Subject, I have a couple of questions.
If the Subject is "Test", the following code finds the email. If the
subject is " Test", it does not. I have to remove the prefix. Why
is that?

If the subject is null, my code doesn't find the email. I figure
someone can send an email without a subject. Any idea on correcting it?

If Not IsNull(strSubject) Then
Set objMail = _
objNS.GetDefaultFolder(6).Items.Find("[Subject] = """ & _
strSubject & """")
Else
Set objMail = _
objNS.GetDefaultFolder(6).Items.Find("[Subject] Is Null")
End If

I have a question on finding the email by date as well. I pass a date
field to the function. It converts the date time to a string then
searches. Out of 10 email times passed to it, if found only 1. Any
idea whay the code below fails the majority of the time?

strTime = Format(datTime, "m/d/yyyy h:nn AMPM")
Set objMail = objNS.GetDefaultFolder(6).Items.Find("[ReceivedTime]= """
& strTime & """")

Michael Bauer [MVP - Outlook] February 22nd 10 09:40 AM

MailItem Find Method question
 


If strSubject is declared as a String type, it never will be Null. Instead
use IsEmpty, or even better just:

If str="" then...

Actually you'd need the LIKE operator in the filter, but that's not
supported. So you'd have to loop through all the collection, and check each
item with
If item.subject like "*whatever*" Then ...

More flexible, and a lot faster, are the Restriction* objects from the
Redemption (www.dimastr.com)

--
Best regards
Michael Bauer - MVP Outlook
Manage and share your categories:
http://www.vboffice.net/product.html?pub=6&lang=en


Am Sun, 21 Feb 2010 15:28:08 -0800 schrieb Salad:

Using the Find method to find a Subject, I have a couple of questions.
If the Subject is "Test", the following code finds the email. If the
subject is " Test", it does not. I have to remove the prefix. Why
is that?

If the subject is null, my code doesn't find the email. I figure
someone can send an email without a subject. Any idea on correcting it?

If Not IsNull(strSubject) Then
Set objMail = _
objNS.GetDefaultFolder(6).Items.Find("[Subject] = """ & _
strSubject & """")
Else
Set objMail = _
objNS.GetDefaultFolder(6).Items.Find("[Subject] Is Null")
End If

I have a question on finding the email by date as well. I pass a date
field to the function. It converts the date time to a string then
searches. Out of 10 email times passed to it, if found only 1. Any
idea whay the code below fails the majority of the time?

strTime = Format(datTime, "m/d/yyyy h:nn AMPM")
Set objMail = objNS.GetDefaultFolder(6).Items.Find("[ReceivedTime]= """
& strTime & """")


Dmitry Streblechenko February 22nd 10 04:47 PM

MailItem Find Method question
 
Under the hood, Outlook searches on the PR_NORMALIZED_SUBJECT (which does
not include the prefix), not PR_SUBJECT.
Where does the strSubject come from? Do you actually store it? Or does the
user type it?

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Salad" wrote in message
...
Using the Find method to find a Subject, I have a couple of questions. If
the Subject is "Test", the following code finds the email. If the subject
is " Test", it does not. I have to remove the prefix. Why is that?

If the subject is null, my code doesn't find the email. I figure someone
can send an email without a subject. Any idea on correcting it?

If Not IsNull(strSubject) Then
Set objMail = _
objNS.GetDefaultFolder(6).Items.Find("[Subject] = """ & _
strSubject & """")
Else
Set objMail = _
objNS.GetDefaultFolder(6).Items.Find("[Subject] Is Null")
End If

I have a question on finding the email by date as well. I pass a date
field to the function. It converts the date time to a string then
searches. Out of 10 email times passed to it, if found only 1. Any idea
whay the code below fails the majority of the time?

strTime = Format(datTime, "m/d/yyyy h:nn AMPM")
Set objMail = objNS.GetDefaultFolder(6).Items.Find("[ReceivedTime]= """ &
strTime & """")




Salad February 22nd 10 06:07 PM

MailItem Find Method question
 
Dmitry Streblechenko wrote:

Under the hood, Outlook searches on the PR_NORMALIZED_SUBJECT (which does
not include the prefix), not PR_SUBJECT.
Where does the strSubject come from? Do you actually store it? Or does the
user type it?


In Access, one can do a File/Import/GetExternalData and link an inbox,
sent, etc folder and it's now a table, similar to an Excel spreadsheet.
So I'm using info from the inbox in my testing.

One of the fields is "Subject" that contains the entire subject line
" Test". Another field is "Subject Prefix" with just the "", and
"Normalized Subject" that contains "Test"

Besides the subject fields , there's also the
received/created/lastmodified columns, the email size, sender name, and
a few other fields like the body.

I thought it'd be relatively simple to find the email.
Works like a champ on the normalized subject as you noted.
I can'r find the email if the subject line is null.
I can't find the email based on any datetime stamp.
Works like a champ on message size.

But I figure there can be one or more emails with the same subject line,
same message size, or same datetimestamp. But all three? I don't think so.

Since the .Find method works fine on the subject and size fields, I'm
obviously passing the wrong filter for a null (blank) subject and for
the date.

I've tried, and failed on
.Find("IsEmpty([Subject]")
.Find("IsNull([Subject]")
.Find("[Subject] = ''")
and for dates
'Set objMail = .Find("[ReceivedTime]= '1/1/2010 3:34:00 AM'")
and Jan 1, 2010, January 1,2010, no seconds, no AM, just the date,
nothing works. Single quotes, double quotes, it doesn't seem to matter.

Based on the above, do you spot anything obvious that is in error? Or
other tests I could make? Or a link to compare my code to for finding
an email?




Dmitry Streblechenko February 22nd 10 08:40 PM

MailItem Find Method question
 
Searching by subject is a bad idea, to put it mildly :-) What happens if you
have multiple messsages with the same subject?
Use the EntryID property and open the item using using
Application.Session.GetItemFromID. There is no reason to search.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Salad" wrote in message
m...
Dmitry Streblechenko wrote:

Under the hood, Outlook searches on the PR_NORMALIZED_SUBJECT (which
does not include the prefix), not PR_SUBJECT.
Where does the strSubject come from? Do you actually store it? Or does
the user type it?


In Access, one can do a File/Import/GetExternalData and link an inbox,
sent, etc folder and it's now a table, similar to an Excel spreadsheet. So
I'm using info from the inbox in my testing.

One of the fields is "Subject" that contains the entire subject line "
Test". Another field is "Subject Prefix" with just the "", and
"Normalized Subject" that contains "Test"

Besides the subject fields , there's also the
received/created/lastmodified columns, the email size, sender name, and a
few other fields like the body.

I thought it'd be relatively simple to find the email.
Works like a champ on the normalized subject as you noted.
I can'r find the email if the subject line is null.
I can't find the email based on any datetime stamp.
Works like a champ on message size.

But I figure there can be one or more emails with the same subject line,
same message size, or same datetimestamp. But all three? I don't think
so.

Since the .Find method works fine on the subject and size fields, I'm
obviously passing the wrong filter for a null (blank) subject and for the
date.

I've tried, and failed on
.Find("IsEmpty([Subject]")
.Find("IsNull([Subject]")
.Find("[Subject] = ''")
and for dates
'Set objMail = .Find("[ReceivedTime]= '1/1/2010 3:34:00 AM'")
and Jan 1, 2010, January 1,2010, no seconds, no AM, just the date, nothing
works. Single quotes, double quotes, it doesn't seem to matter.

Based on the above, do you spot anything obvious that is in error? Or
other tests I could make? Or a link to compare my code to for finding an
email?





Salad February 22nd 10 10:35 PM

MailItem Find Method question
 
Dmitry Streblechenko wrote:

Searching by subject is a bad idea, to put it mildly :-) What happens if you
have multiple messsages with the same subject?
Use the EntryID property and open the item using using
Application.Session.GetItemFromID. There is no reason to search.

Wouldn't you know, EntryID is not one of the columns in the table tha is
created in Access if one links a folder.

Well, MS gave us/me the partial information, but not all unfortunately.
The table lets one know if there are attachments or not, but not the
attachment names nor as it appears an easy way to find the email. Thus
I'd need a way to find the email if it had attachments.



Dmitry Streblechenko February 23rd 10 04:38 PM

MailItem Find Method question
 
If you cannot get entry id as one of the columns, don't use
File/Import/GetExternalData.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Salad" wrote in message
m...
Dmitry Streblechenko wrote:

Searching by subject is a bad idea, to put it mildly :-) What happens if
you have multiple messsages with the same subject?
Use the EntryID property and open the item using using
Application.Session.GetItemFromID. There is no reason to search.

Wouldn't you know, EntryID is not one of the columns in the table tha is
created in Access if one links a folder.

Well, MS gave us/me the partial information, but not all unfortunately.
The table lets one know if there are attachments or not, but not the
attachment names nor as it appears an easy way to find the email. Thus
I'd need a way to find the email if it had attachments.






All times are GMT +1. The time now is 10:44 AM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com