所以我对VB比较陌生,一般来说,我很喜欢这方面的技巧,但是我正在为Outlook创建一个VSTO插件,用于少数用户修改的电子邮件收件箱。我遇到的问题是其中一个为报告目的而设计的按钮。
当电子邮件被用户拾取时,我有一个按钮,可以修改主题行,在主题行后面附加"action_userid - date&time -"。用户ID总是7个字符。我想做的是遍历所有选定的电子邮件,从该主题行获取用户id,并创建一个数组,该数组显示每个用户已操作的电子邮件总数。
数组的输出应该是userid count的格式。获取userid很简单,因为它总是在主题行的相同位置。
我有它的工作在一个基本的测试形式通过创建一个字符串与所有的用户id,然后通过它迭代(忽略Do While Count,这只是为了测试),但我想改变它是更简单的数组内。
For Each MItem In oSel
If InStr(MItem.Subject, "Duplicate - ") Then
dupeCount = dupeCount + 1
End If
If InStr(MItem.Subject, "Actioned - ") Then
emailUser = Left(Mid(MItem.Subject, (InStr(MItem.Subject, "Actioned - ") + 11)), 7)
userArray = userArray & " " & emailUser
emailCount = emailCount + 1
Else
NoID = NoID + 1
End If
Next MItem
Do While Count > 0
If Len(userArray) > 2 Then
arrayUser = Left(userArray, 8)
userCount = (Len(userArray) - Len(Replace(userArray, arrayUser, ""))) / Len(arrayUser)
markedCount = markedCount + userCount
msgStr = msgStr & arrayUser & ": " & userCount & " | "
End If
If InStr(userArray, arrayUser) Then
userArray = Replace(userArray, arrayUser, "")
End If
If userArray = vbNullString Then
Count = 0
GoTo CompileEmail
End If
Loop
我该怎么做呢,我想应该是这样的:
If InStr(MItem.Subject, "Actioned - ") Then
emailUser = Left(Mid(MItem.Subject, (InStr(MItem.Subject, "Actioned - ") + 11)), 7)
If userArray.Contains(emailUser) Then
userLoc = Array.IndexOf(userArray, emailUser)
'' Get jagged array details at userLoc
'' Modify jagged array to iterate count for that userid by 1
'' Place modified jagged array back in userArray
在这一点上我有点困惑如何创建/操作一个数组来产生这个结果
我对Outlook不太熟悉,所以希望有更有经验的人来回答这个问题,但我可以给你一个提示。
MItem
有很多对用户不可见的属性,但它们是对象(MailItem
)的重要组成部分,如BillingInformation
字段(或任何其他不显示给用户的字段)
当你更新主题行
时你可以这样做mItem.BillingInformation = "JohnSmith"
mItem.Save
上面的代码将用户JohnSmith添加到名为BillingInformation
的字段并保存邮件。稍后,当您想要创建用户报告时,只需过滤所有邮件项
Dim ns As NameSpace
Dim fd As Outlook.Folder
ns = Application.GetNamespace("MAPI")
fd = ns.GetDefaultFolder(olFolderInbox)
Dim mItems As Outlook.Items
mItems = fd.Items
Dim filtered As Outlook.Items
filtered = mItems.Restrict("[BillingInformation] = 'JohnSmith'")
Dim mItem As Outlook.MailItem
For i as Integer = 1 To filtered.Count
mItem = mItems(i)
Debug.Print mItem.Subject
Next i