正如标题中所述,我正试图防止Outlook中的harddeleting项目。我能够捕捉BeforeItemMove事件中的操作。然后,用户可以选择是继续还是取消。如果他决定继续,则应将项目移至“已删除邮件”文件夹,而不是永久删除。使用VBA将Outlook中的硬删除项目重定向到已删除项目
我的第一个想法是取消删除操作,通过将取消设置为True,然后将项目移动到已删除邮件文件夹。问题是,事件再次为移动操作触发,但是交付的对象似乎以某种方式被破坏。我试着在删除的项目上设置一个UserProperty,然后移动它。但在事件子的“第二次运行”中,当我尝试读取prop时,发现运行时错误,指出无法找到消息。
S.O.帮帮我?
这里是所涉及的两个事件处理程序:
Private Sub oTasks_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As Folder, Cancel As Boolean)
Dim shouldDelete As Boolean
shouldDelete = False
Dim hardDeletePerformed
hardDeletePerformed = False
If (MoveTo Is Nothing) Then
shouldDelete = True
hardDeletePerformed = True
ElseIf (g_oNS.CompareEntryIDs(MoveTo.EntryID, oDeletedItems.EntryID)) Then
shouldDelete = True
End If
Dim oTask As TaskItem
Set oTask = Item
If shouldDelete Then
If (InStr(1, oTask.Subject, "frist", vbTextCompare)) Then
Dim message As String
message = "..."
Dim res As VbMsgBoxResult
res = MsgBox(message, vbOKOnly + vbCritical, "Compliance-Warnung!")
Cancel = True
Else
Dim message2 As String
message2 = "..."
Dim res2 As VbMsgBoxResult
res2 = MsgBox(message2, vbYesNo + vbCritical, "Compliance-Warnung!")
If (res2 = vbYes) Then
Cancel = False
If hardDeletePerformed Then
oTask.Move oDeletedItems
Cancel = True
End If
Else
Cancel = True
End If
End If
End If
End Sub
Private Sub oAppointments_BeforeItemMove(ByVal Item As Object, ByVal MoveTo As Folder, Cancel As Boolean)
If inProgress Then
Cancel = True
inProgress = False
Else
Dim shouldDelete As Boolean
shouldDelete = False
Dim hardDeletePerformed
hardDeletePerformed = False
If (MoveTo Is Nothing) Then
shouldDelete = True
hardDeletePerformed = True
ElseIf (g_oNS.CompareEntryIDs(MoveTo.EntryID, oDeletedItems.EntryID)) Then
shouldDelete = True
End If
Dim oAppointment As AppointmentItem
Set oAppointment = Item
If shouldDelete Then
If (InStr(1, oAppointment.Subject, "frist", vbTextCompare)) Then
Dim message As String
message = "..."
Dim res As VbMsgBoxResult
res = MsgBox(message, vbOKOnly + vbCritical, "Compliance-Warnung!")
Cancel = True
Else
Dim message2 As String
message2 = "..."
Dim res2 As VbMsgBoxResult
res2 = MsgBox(message2, vbYesNo + vbCritical, "Compliance-Warnung!")
If (res2 = vbYes) Then
Cancel = False
If hardDeletePerformed Then
inProgress = True
oAppointment.Move oDeletedItems
oAppointment.Save
'inProgress = False
Cancel = True
End If
Else
Cancel = True
End If
End If
End If
End If
End Sub
奇怪的是,对于oTasks第一事件处理的工作正是我想要的方式运行。该项目被移至已删除的项目,并且该事件处理程序仅被调用一次。 oAppointments的第二个会被调用两次而没有Tim对inProgress-if-clause的建议......而真正奇怪的是,在第二个事件处理程序中,该项目被移动到草稿而不是删除项目,但是oDeletedItems-Object在两者之间没有改变...任何想法?我不喜欢VBA!
总是有助于显示您的实际代码... –