Outlook是一个功能强大的电子邮件客户端,但很多人不知道它可以通过VBA(Visual Basic for Applications)进行深度定制,以满足特定的工作需求。自定义字段(User Defined Fields,简称UDF)是Outlook中一个强大的功能,可以帮助用户跟踪和管理电子邮件请求。本文将介绍如何利用VBA和UDF来提升Outlook使用体验,将其打造成一个高效的请求处理工具。
虽然不是专业的程序员,但通过自学和实践,在过去几年中积累了不少VBA编程知识。这篇文章是和同事们日常工作中使用的一些代码的集合,以及对这些代码的改进和发展。
在阅读本文之前,假设已经具备以下条件:
为了更好地利用将要创建的宏,最好将这些功能“触手可及”,而不是每次都使用Alt+F8来运行宏。创建工具栏并将宏添加到工具栏后,可以通过单击来使用它们。
要了解如何创建工具栏并将宏添加到工具栏,请参考以下链接:
要将宏添加到刚刚创建的工具栏,只需从类别中选择宏选项,然后将项目拖放到工具栏上。
自定义字段(UDF)是可以在Outlook中创建的额外字段,然后将其拖放到邮箱中,以存储需要的额外信息。这些可以是公司名称、用户ID、成本等。
Outlook内置了相当多的字段,可以通过右键点击邮箱标题栏并选择字段选择器来添加它们。这将给一个工具箱,可以从中拖放项目到邮箱中。
要深入了解自定义字段,请访问以下链接:
添加字段后,可以设置Outlook使这些字段在点击时可编辑,但发现这种方式不太方便,甚至看起来不太美观。因此,将使用工具栏和宏来管理这些字段。
将使用一个简单的宏来实现所需的结果。将向展示一个简单的例子。
现在已经熟悉了UDF和优化选项,让直接跳到代码部分。为了使代码工作,需要添加对Microsoft Forms 2.0 Object Library的引用。
可以通过在Outlook中打开Visual Basic编辑器(Alt+F11)来做到这一点。使用项目资源管理器添加一个模块到项目中。双击模块。现在转到工具 - 引用,并搜索引用,然后在它旁边的复选框中打勾,或者浏览以找到FM20.dll。
完成上述步骤后,可以开始编写代码,首先创建一个子程序:
Sub CustomerID(Optional ByVal Value As String, Optional ByVal IsCustomEntry As Boolean = False)
Dim i As Long
Dim myCollection As Object
Dim msg As Outlook.MailItem
Dim objProperty As Outlook.UserProperty
Dim UserDefinedFieldName As String
Set myCollection = Outlook.Application.ActiveExplorer.Selection
UserDefinedFieldName = "CustomerID"
If IsCustomEntry = False Then
If Not myCollection Is Nothing Then
For i = 1 To myCollection.Count
Set msg = myCollection.Item(i)
Set objProperty = msg.UserProperties.Add(UserDefinedFieldName, Outlook.OlUserPropertyType.olTExt)
objProperty.Value = Value
msg.Save
Next i
End If
ElseIf IsCustomEntry = True Then
Value = InputBox("Please enter custom value", "Input custom field value")
If Not myCollection Is Nothing Then
For i = 1 To myCollection.Count
Set msg = myCollection.Item(i)
Set objProperty = msg.UserProperties.Add(UserDefinedFieldName, Outlook.OlUserPropertyType.olTExt)
objProperty.Value = Value
msg.Save
Next i
End If
End If
End Sub
这是整个代码,没有中断。
请不要忘记添加引用...它会给出一个烦人的错误消息,这无助于识别问题。可能还可以在宏中添加一些错误处理,以防尝试编辑非邮件项目的UDF,比如日历邀请或任务。认为最简单的解决方案是:
On Error Resume Next
这是一个足够的解决方案,使行跳到下一个项目,或者也可以添加一个决策树,检查myCollection.Item(i)是否是MailItem。
如果巧妙地使用这些技巧,它可以帮助生活变得更轻松,比如在Outlook中创建一个下拉菜单,列出最常见的UDF及其值,这样就可以比以前更好地管理电子邮件。
UDF也可以作为分组标准。可以设置一个UDF为MSGSTATUS,并添加值,例如:Active, Pending, Non-Action,然后设置Outlook根据MSGSTATUS字段对电子邮件进行分组。
甚至不需要UDF可见,Outlook仍然会根据它的值进行分组!