无论如何我可以使用像outlookfield.contains(mystring)这样的Find或Restrict吗?
答案 0 :(得分:1)
您可以在方括号中指定字段,如以下代码段所示:
Set contact = objContacts.Items.Find("[Email1Address]=" & Chr(34) & .SenderEmailAddress & Chr(34))
Set contact = objContacts.Items.Find("[FileAs] = ""Smith, Jeff"" and [FirstName] = ""Jeff""")
字段名在MSDN documentation中描述,或者可以使用VBA对象目录查看器进行检查。
要实现Contains
,您可以在要查找的字符串之前和之后使用*
作为通配符(例如“* myString *”)。要在字段中搜索文字*
,您必须使用~*
。
答案 1 :(得分:1)
根据the documentation you linked to,没有办法做到这一点。
附加说明
如果您尝试使用“查找”或“限制”方法 用户定义的字段,必须在文件夹中定义字段, 否则会发生错误。没有办法执行“包含” 操作。例如,您无法使用“查找”或“限制”进行搜索 在“主题”字段中具有特定单词的项目。相反,你 可以使用AdvancedSearch方法,也可以循环遍历所有 文件夹中的项目并使用InStr函数执行搜索 在一个领域内。您可以使用Restrict方法搜索项目 在一定范围的字符内开始。例如,到 搜索姓氏以字母M开头的所有联系人, 使用此过滤器:
sFilter =“[LastName]>'LZZZ'和[LastName]<'N'”
从你的问题中确切地说明你要做的是什么,以提供更多的上下文我试图计算所有包含某个主题的主题的电子邮件(我称之为mystring以匹配你的例子)。
以下是我开始使用的代码:
string mystring = "Such String";
int count = inboxFolder.Items.Restrict("[Subject] = " + mystring).Count;
Debug.WriteLine("{0} email(s) contain '{1}'", count, mystring);
只要电子邮件的主题与mystring的完全匹配不够好,这就行了,如果字符串包含在主题的任何地方,我需要它来计算。< / p>
我尝试{* 3}添加*符号作为通配符,但它对我不起作用。
我没有使用AdvancedSeach方法(它相当神秘的文档Axel Kemper's answer)而是选择在每个项目中执行循环,并手动检查它是否包含感兴趣的字符串:
string mystring = "Such String";
int count = 0;
foreach (var item in inboxFolder.Items)
{
if (item is Outlook.MailItem)
{
Outlook.MailItem mailItem = item as Outlook.MailItem;
if (mailItem.Subject != null && mailItem.Subject.Contains(mystring))
{
count++;
}
}
}
Debug.WriteLine("{0} email(s) contain '{1}'", count, mystring);
我为了简化可读性和理解而没有考虑到代码,但这也可以成为单行LINQ表达式:
string mystring = "Such String";
int count = inboxFolder.Items.OfType<Outlook.MailItem>().Count(mailItem => mailItem.Subject != null && mailItem.Subject.Contains(mystring));
Debug.WriteLine("{0} email(s) contain '{1}'", count, mystring);
两者的输出:
42封电子邮件包含“此类字符串”