Как сказано в заголовке, я пытаюсь предотвратить жесткие элементы в Outlook. Я могу поймать операцию в событии BeforeItemMove. Затем пользователю предоставляется выбор: продолжать или отменять. Если он решит продолжить, элемент следует перенести в папку «Удаленные» и не удаляться навсегда.Перенаправление удаленных элементов в Outlook на удаленные элементы с помощью VBA
Моя первая идея состояла в том, чтобы отменить операцию удаления, установив Cancel to True, а затем перемещая элемент в папку «Удаленные». Проблема в том, что событие снова срабатывает для операции перемещения, но предмет предмета с ручным движением кажется каким-то образом сломан. Я попытался установить UserProperty на удаленный элемент, а затем переместил его. но в «втором запуске» события-sub, когда я пытаюсь прочитать prop, я получаю ошибку времени выполнения, заявив, что сообщение не может быть найдено.
Can 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
Странная вещь, первый EventHandler для oTasks работает именно так, как я хочу его. Элемент перемещается на удаленные элементы, а обработчик событий вызывается только один раз. второй для oAppointments будет вызываться дважды без предложений Tims для предложения inProgress-if ... и что действительно странно, что во втором обработчике событий элемент перемещается в черновики, а не в удаленные элементы, но объект oDeletedItems-Object не меняется между ... Любые идеи?
PS: Я ненавижу VBA!
Всегда помогает показать ваш фактический код ... –