Redirecting hard-deleted items in Outlook to Deleted Items with VBA -
as said in title i'm trying prevent harddeleting items in outlook. able catch operation in beforeitemmove-event. user given choice whether proceed or cancel. if decides proceed, item should moved deleted items folder , not deleted permanently.
my first idea cancel delete-operation setting cancel true , moving item deleted items folder. problem is, event fires again move operation, handed item-object seems broken somehow. tried setting userproperty on deleted item , moving it. in "second run" of event-sub when try read prop, runtime-error saying message not found.
can s.o. help?
here 2 event-handlers involved:
private sub otasks_beforeitemmove(byval item object, byval moveto folder, cancel boolean) dim shoulddelete boolean shoulddelete = false dim harddeleteperformed harddeleteperformed = false if (moveto nothing) shoulddelete = true harddeleteperformed = true elseif (g_ons.compareentryids(moveto.entryid, odeleteditems.entryid)) shoulddelete = true end if dim otask taskitem set otask = item if shoulddelete if (instr(1, otask.subject, "frist", vbtextcompare)) dim message string message = "..." dim res vbmsgboxresult res = msgbox(message, vbokonly + vbcritical, "compliance-warnung!") cancel = true else dim message2 string message2 = "..." dim res2 vbmsgboxresult res2 = msgbox(message2, vbyesno + vbcritical, "compliance-warnung!") if (res2 = vbyes) cancel = false if harddeleteperformed otask.move odeleteditems cancel = true end if else cancel = true end if end if end if end sub private sub oappointments_beforeitemmove(byval item object, byval moveto folder, cancel boolean) if inprogress cancel = true inprogress = false else dim shoulddelete boolean shoulddelete = false dim harddeleteperformed harddeleteperformed = false if (moveto nothing) shoulddelete = true harddeleteperformed = true elseif (g_ons.compareentryids(moveto.entryid, odeleteditems.entryid)) shoulddelete = true end if dim oappointment appointmentitem set oappointment = item if shoulddelete if (instr(1, oappointment.subject, "frist", vbtextcompare)) dim message string message = "..." dim res vbmsgboxresult res = msgbox(message, vbokonly + vbcritical, "compliance-warnung!") cancel = true else dim message2 string message2 = "..." dim res2 vbmsgboxresult res2 = msgbox(message2, vbyesno + vbcritical, "compliance-warnung!") if (res2 = vbyes) cancel = false if harddeleteperformed 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
the weird thing is, first eventhandler otasks works way want to. item moved deleted items , eventhandler called once. second oappointments called twice without tims suggestions inprogress-if-clause... , whats realy weird is, in second eventhandler, item gets moved drafts , not deleted items, odeleteditems-object not changed in between... ideas?
ps: hate vba!
i going suggest use
application.enableevents=false
to temporarily disable events before moved itam, on checking seems there's no such thing in outlook vba. alternative use static variable allow move event skipped.
intested pseudocode:
sub someeventhandler() static inprocess boolean if inprocess exit sub if isharddelete inprocess = true 'move item inprocess = false end if end sub
Comments
Post a Comment