Vba Outlook VB脚本从电子邮件创建任务-不创建任务

Vba Outlook VB脚本从电子邮件创建任务-不创建任务,vba,vbscript,outlook,Vba,Vbscript,Outlook,我已经有了下面的脚本,就我所见,它应该可以正常工作(事实上,在昨天的某一点上是有效的——但我一定是在试图清理代码时无意中做了一些更改,因为它今天已经不起作用了) 也许另一双眼睛可以帮助我。我有一个规则设置,可以将这些电子邮件设置到它们自己的文件夹中,并在Outlook中运行脚本。这没有问题——问题来自脚本本身 被过滤的电子邮件的主题通常是这样的: “票证:328157学校:布拉布拉赫问题:磁通电容器问题” 这个想法是,脚本将创建一个具有适当优先级的任务,并将其放在适当的类别中(并且在“学校”之后

我已经有了下面的脚本,就我所见,它应该可以正常工作(事实上,在昨天的某一点上是有效的——但我一定是在试图清理代码时无意中做了一些更改,因为它今天已经不起作用了)

也许另一双眼睛可以帮助我。我有一个规则设置,可以将这些电子邮件设置到它们自己的文件夹中,并在Outlook中运行脚本。这没有问题——问题来自脚本本身

被过滤的电子邮件的主题通常是这样的:

“票证:328157学校:布拉布拉赫问题:磁通电容器问题”

这个想法是,脚本将创建一个具有适当优先级的任务,并将其放在适当的类别中(并且在“学校”之后只包含主题中的内容,因为门票并不重要)

以下是脚本:

Sub MakeTaskFromMail(MyMail As Outlook.MailItem)
Dim strID As String
Dim olNS As Outlook.NameSpace
Dim olMail As Outlook.MailItem
Dim objTask As Outlook.TaskItem

'Get Specific Email based on ID
strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set olMail = olNS.GetItemFromID(strID)
Set objTask = Application.CreateItem(olTaskItem)
'**************************
'*****SET TASK SUBJECT*****
'**************************
Dim sInput As String
Dim sOutput As String
'get the email subject
sInput = olMail.Subject
'get all the text after School: in the subject
sOutput = Mid(sInput, InStr(sInput, "School:") + 8)

Dim priorityUrgentString As String
Dim priorityHighString As String
Dim priorityMediumString As String
Dim priorityLowString As String
'Set Priority Strings to check for to determine category
priorityUrgentString = "Priority: Urgent"
priorityHighString = "Priority: High Priority"
priorityMediumString = "Priority: Medium"
priorityLowString = "Priority: Project"
'check to see if ticket is Urgent
'if urgent - due date is today and alert is set for 8am
If InStr(olMail.Body, priorityUrgentString) <> 0 Then
    With objTask
        .Subject = sOutput
        .DueDate = olMail.SentOn
        .Body = olMail.Body
        .Categories = "Urgent"
        .Importance = olImportanceHigh
        .ReminderSet = True
        .ReminderTime = objTask.DueDate
    End With
'check to see if ticket is High Priority
'if High Priority - due date is today - alert is set for 8am
ElseIf InStr(olMail.Body, priorityHighString) <> 0 Then
    With objTask
        .Subject = sOutput
        .DueDate = olMail.SentOn + 2
        .Body = olMail.Body
        .Categories = "High"
        .Importance = olImportanceHigh
        .ReminderSet = True
        .ReminderTime = objTask.DueDate + 2
    End With
'check to see if its a medium priority
'if medium - due date is set for 7 days, no alert
ElseIf InStr(olMail.Body, priorityMediumString) <> 0 Then
    With objTask
        .Subject = sOutput
        .DueDate = olMail.SentOn + 7
        .Body = olMail.Body
        .Categories = "Medium"
        .Importance = olImportanceNormal
    End With
'check to see if its a project priority
'if project - due date is set for 21 days, no alert
ElseIf InStr(olMail.Body, priorityLowString) <> 0 Then
    With objTask
        .Subject = sOutput
        .DueDate = olMail.SentOn + 21
        .Body = olMail.Body
        .Categories = "Project"
        .Importance = olImportanceLow
    End With
End If
'Copy Attachments
Call CopyAttachments(olMail, objTask)
'Save Task
objTask.Save

Set objTask = Nothing
Set olMail = Nothing
Set olNS = Nothing
End Sub

Sub CopyAttachments(objSourceItem, objTargetItem)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
strPath = fldTemp.Path & "\"
For Each objAtt In objSourceItem.Attachments
strFile = strPath & objAtt.FileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
fso.DeleteFile strFile
Next

Set fldTemp = Nothing
Set fso = Nothing
End Sub
子MakeTaskFromMail(MyMail作为Outlook.MailItem)
像细绳一样模糊的条纹
将olNS设置为Outlook.NameSpace
以Outlook.MailItem的形式发送邮件
将对象任务设置为Outlook.TaskItem
'根据ID获取特定电子邮件
strID=MyMail.EntryID
Set olNS=Application.GetNamespace(“MAPI”)
设置olMail=olNS.GetItemFromID(strID)
Set objTask=Application.CreateItem(olTaskItem)
'**************************
'****设置任务主题*****
'**************************
作为字符串的单音字
淡汤串
'获取电子邮件主题
sInput=olMail.Subject
“放学后获取所有课文:在主题中
sOutput=Mid(sInput,InStr(sInput,School:)+8)
Dim priorityUrgentString作为字符串
Dim priorityHighString作为字符串
Dim priorityMediumString作为字符串
Dim priorityLowString作为字符串
'设置要检查的优先级字符串以确定类别
priorityUrgentString=“优先级:紧急”
priorityHighString=“优先级:高优先级”
priorityMediumString=“优先级:中等”
priorityLowString=“优先级:项目”
“检查一下车票是否紧急
'如果紧急-截止日期是今天,警报设置为上午8点
如果InStr(olMail.Body,priorityUrgentString)为0,则
带任务
.Subject=sOutput
.DueDate=olMail.SentOn
.Body=olMail.Body
.Categories=“紧急”
.重要性=低重要性高
.提醒集=真
.rementertime=objTask.DueDate
以
“检查车票是否具有高优先级
'如果高优先级-截止日期为今天-警报设置为上午8点
ElseIf InStr(olMail.Body,priorityHighString)0然后
带任务
.Subject=sOutput
.DueDate=olMail.SentOn+2
.Body=olMail.Body
.Categories=“高”
.重要性=低重要性高
.提醒集=真
.rementertime=objTask.DueDate+2
以
'检查是否为中等优先级
'如果中期到期日设置为7天,则无警报
ElseIf InStr(olMail.Body,priorityMediumString)0然后
带任务
.Subject=sOutput
.DueDate=olMail.SentOn+7
.Body=olMail.Body
.Categories=“中等”
.重要性=低重要性正常
以
'检查是否为项目优先级
'如果项目到期日设置为21天,则不会发出警报
ElseIf InStr(olMail.Body,priorityLowString)0然后
带任务
.Subject=sOutput
.DueDate=olMail.SentOn+21
.Body=olMail.Body
.Categories=“项目”
.重要性=低重要性
以
如果结束
'复制附件
呼叫副本附件(olMail、objTask)
'保存任务
任务。保存
设置objTask=Nothing
设置olMail=Nothing
设置olNS=Nothing
端接头
子副本附件(objSourceItem、objTargetItem)
设置fso=CreateObject(“Scripting.FileSystemObject”)
设置fldTemp=fso.GetSpecialFolder(2)的临时文件夹
strPath=fldTemp.Path&“\”
对于objSourceItem.附件中的每个objAtt
strFile=strPath&objAtt.FileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile,,objAtt.DisplayName
fso.delete文件strFile
下一个
设置fldTemp=无
设置fso=无
端接头

在不运行脚本的情况下,我可以看到:

设置TaskItem后,必须将其保存(使用。另存为With中的最后一行)

此外,您可能需要设置与邮件项匹配的提醒时间

.rementertime=olMail.SentOn

而不是

.rementertime=objTask.DueDate


因为它还没有保存

我做了那些更改-仍然没有骰子。我不确定它是什么时候更改的-但它可能与我的宏设置有关-奇怪。规则现在按预期工作-我确定您的代码位有帮助,所以我将其标记为答案。谢谢!