2009-07-10 4 views
8

मैं वीबीए कोड के साथ Outlook 2000 से MailMessage को स्थायी रूप से हटाने का तरीका ढूंढ रहा हूं। मैं हटाए गए आइटम खाली करने के लिए दूसरा लूप करने के बिना ऐसा करना चाहता हूं।VBA के साथ Outlook में MailMessage को स्थायी रूप से हटाएं?

अनिवार्य रूप से, मैं एक संदेश पर क्लिक करने के यूआई पद्धति के लिए एक कोड बराबर रहा हूँ और मार शिफ्ट + DELETE

क्या ऐसी कोई बात है?

उत्तर

11

यह पहली बार तो आगे बढ़ इसे हटाने (2000 में कुछ patchs पर काम करता है) का प्रयास करें या RDO या सीडीओ का उपयोग काम करने के लिए आप

Set objDeletedItem = objDeletedItem.Move(DeletedFolder) 
    objDeletedItem.Delete 

सीडीओ रास्ता

(आप उन्हें स्थापित करने के लिए होगा) के लिए
Set objCDOSession = CreateObject("MAPI.Session") 
objCDOSession.Logon "", "", False, False 
Set objMail = objCDOSession.GetMessage(objItem.EntryID, objItem.Parent.StoreID) 
objMail.Delete 

RDO

set objRDOSession = CreateObject("Redemption.RDOSession") 
objRDOSession.Logon 
set objMail = objRDOSession.GetMessageFromID(objItem.EntryID>) 
objMail.Delete 

तुम भी संदेश पहले निशान सकता है इससे पहले कि आप और वें हटाना ई हटाए गए आइटम फ़ोल्डर के माध्यम से लूप करें और इसे एक दूसरी बार हटाएं। इसे Userproperty का उपयोग करके चिह्नित करें। आप के माध्यम से

objMail.UserProperties.Add "Deleted", olText 
objMail.Save 
objMail.Delete 

पाश आइटम कि userprop

Set objDeletedFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems) 
    For Each objItem In objDeletedFolder.Items 
     Set objProperty = objItem.UserProperties.Find("Deleted") 
     If TypeName(objProperty) <> "Nothing" Then 
      objItem.Delete 
     End If 
    Next 
+0

मैं नहीं बल्कि सीडीओ या RDO जाना नहीं चाहते हैं, मेरे पूरे मुद्दे cuz यहाँ कोड जटिलता को कम करने के लिए था, और मैं नहीं बल्कि सभी नए निर्भरता को शुरू नहीं जाना चाहते हैं। दूसरा मूल रूप से मैं अब क्या कर रहा हूं। मैं पहले (छद्म): इनबॉक्स में प्रत्येक संदेश के लिए msg.delete '// हटाए गए आइटम हटाए गए प्रत्येक संदेश के लिए हटाता है msg।हटाना '// स्थायी रूप से हटा तरह अगले कुछ जबकि मैं क्या करना चाहते हैं क्या, है: इनबॉक्स msg.delete (स्थायी = सच) में प्रत्येक संदेश के लिए अगले – eidylon

+0

2000 में ऐसी कोई विधि नहीं है। आपको वीबीए में अपना काम बनाना होगा। चाल-हटा या आपके लूप के साथ क्या गलत है? क्या यह प्रदर्शन है? – 76mel

+0

इसके साथ स्वाभाविक रूप से "गलत" कुछ भी नहीं, मैं सिर्फ दो लूपों पर भरोसा करने से अधिक साफ करने का तरीका ढूंढ रहा था। वैसे भी धन्यवाद। – eidylon

1

आप निम्नलिखित दृष्टिकोण का उपयोग कर सकते देखने के लिए, मूल रूप से आप अपने ई-मेल संदेश के सभी के रूप में आप वर्तमान में क्या कर रहे हैं को नष्ट नष्ट कर दिया है, तो यह एक लाइन फोन हटाए गए आइटम फ़ोल्डर खाली करें। कोड jscript में है, लेकिन अगर आप वास्तव में मुझे जरूरत के लिए :) मैं अनुवाद कर सकते हैं

var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails 

app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute(); 
+0

+1 के साथ लाइन objRDOSession.Logon को प्रतिस्थापित कर सकते हैं लेकिन मैं यह सुनिश्चित करने के लिए FindControl ID का उपयोग करूंगा कि यह Outlook के गैर-अंग्रेज़ी संस्करणों पर काम करता है। – JimmyPena

1
सभी की

आसान समाधान, पहला तरीका के समान:

FindID = deleteme.EntryID 
    deleteme.Delete 
    set deleteme = NameSpace.GetItemFromID(FindID) 
    deleteme.Delete 

इसे दो बार करो और यह हूँ अच्छे के लिए चले जाओ, और कोई प्रदर्शन हत्या लूप नहीं। (यदि डिफ़ॉल्ट स्टोर में नहीं है तो नामस्थान एक विशेष नेमस्पेस चर हो सकता है।) ध्यान दें कि यह केवल तभी काम करता है जब आप स्टोर में नहीं हटाते हैं, जो EntryID को बदल सकता है या इसे पूरी तरह से हटा सकता है।

+0

यह केवल एक पीएसटी स्टोर के लिए काम करेगा जहां संदेश प्रविष्टि आईडी को किसी अन्य फ़ोल्डर में स्थानांतरित नहीं किया जाता है। यह एक एक्सचेंज स्टोर (या तो कैश या ऑनलाइन) काम नहीं करेगा। –

+0

क्या हाल ही में यह बदल गया है? मैंने मूल रूप से एक्सचेंज 2007 मेलबॉक्स के लिए यह किया था। – SilverbackNet

+0

नहीं, यह हमेशा पीएसटी स्टोर्स बनाम एक्सचेंज के साथ मामला रहा है। –

1

मुझे पता है कि यह एक पुराना धागा है, लेकिन चूंकि मुझे हाल ही में एक मैक्रो लिखने का कारण था जो ऐसा करता है, मैंने सोचा कि मैं साझा करूंगा। मैंने पाया कि निकालें विधि एक स्थायी विलोपन प्रतीत होता है।

While oFilteredItems.Count > 0 
    Debug.Print " " & oFilteredItems.GetFirst.Subject 
    oFilteredItems.Remove 1 
Wend 

मैं आइटम है कि कुछ मापदंडों के आधार पर फ़िल्टर कर दिए गए की एक सूची के साथ शुरू: मैं इस स्निपेट का उपयोग कर रहा हूँ। फिर, मैं इसे एक समय में हटा देता हूं जब तक यह खत्म नहीं हो जाता है।

HTH

+0

बढ़िया! मैं पुष्टि करता हूं कि यह मेरे लिए काम करता है। मैं एक VBA मैक्रो में एक परीक्षण फ़ोल्डर पर Application.ActiveExplorer.CurrentFolder.Items.Remove (1) का उपयोग करें। –

संबंधित मुद्दे