2012-01-02 25 views
7

पर आधारित एक्सेल शीट अपडेट करें मेरा उद्देश्य एक्सेल शीट को अपडेट करना है, जब भी मुझे किसी विशेष विषय के साथ मेल मिल रहा है (मैंने प्रासंगिक मेल को किसी फ़ोल्डर में स्थानांतरित करने के लिए नियम स्थापित किया है)।आउटलुक मेल

मैंने इस साइट में एक ही पोस्ट देखी, लेकिन दिया गया कोड पूरा नहीं हुआ है। एक 'समर्थक' या 'तकनीक' नहीं होने के कारण यह कंट्री कोड के लिए बहुत मुश्किल है।

Mail शामिल हैं:

फ़ाइल नाम: स्वामी का नाम: अंतिम अपडेट की तारीख: फ़ाइल locaion (यह हो जाएगा शेयर ड्राइव पथ):

मैं इस मेल दैनिक मिलता है और इस अद्यतन करने के लिए की आवश्यकता होगी एक्सेल शीट में जानकारी। (जो मैं महीने के अंत तक खुला रहता हूं)

कृपया मेरी मदद करें। अग्रिम धन्यवाद

+3

स्क्रैच से लिखने के लिए यह कोड का एक महत्वपूर्ण हिस्सा है - यदि आप उस लिंक से कोड पोस्ट करते हैं जिसे आपने संदर्भित किया है और जो आपने आज तक करने की कोशिश की है, तो यह एक बेहतर सवाल होगा। – brettdj

उत्तर

23

परिचय

इस उत्तर के पहले संस्करण में में, मैं तुम्हें एक और सवाल जो मैं अब जानते हैं कि आप पढ़ने के लिए सक्षम नहीं होगा करने के लिए भेजा।

आपको जो भी कोड चाहिए वह यहां है लेकिन यह तत्काल समाधान के रूप में नहीं लिखा गया है। यह एक ट्यूटोरियल है जो आपको Outlook ऑब्जेक्ट मॉडल में पेश करता है, Outlook डेटाबेस से डेटा प्राप्त करता है और Excel कार्यपुस्तिका में जाता है। चिंता न करें कि आप "ए 'समर्थक या' तकनीकी 'नहीं हैं; एक बार हम सभी नए थे। खंडों के माध्यम से काम करें। चिंता न करें अगर आप इसे सब समझ नहीं पाते हैं। बस आपको जिस बिट्स की आवश्यकता है उसे चुनें। जब आप अपना समाधान बढ़ाना चाहते हैं, तो इस ट्यूटोरियल और कोड पर वापस आएं जो आपने अपनी डिस्क पर कॉपी की होगी।

निम्न अनुभागों में, answerA() और AnswerB() का उद्देश्य फ़ोल्डर संरचना को समझने में आपकी सहायता करने के लिए है। उत्तर सी 1() भी एक अल्पकालिक प्रशिक्षण सहायता है। हालांकि, AnswerC2() और AnswerC3() subroutines हैं जिन्हें आपको निरंतर आवश्यकता हो सकती है। यदि आप उन्हें रखते हैं, तो मेरा सुझाव है कि आप उनका नाम बदलें; उदाहरण के लिए: FindFolder() और FindFolderSub()।

उत्तरदायी() भी एक प्रशिक्षण सहायता है लेकिन आपको एक को बनाए रखना चाहिए। यह आपको कुछ मेल आइटम गुणों तक पहुंचने का तरीका दिखाता है लेकिन मुझे आपके द्वारा दिखाए गए मेल मेल गुणों तक पहुंच की आवश्यकता हो सकती है। वीबी संपादक के भीतर, ऑब्जेक्ट एक्सप्लोरर को प्रदर्शित करने के लिए F2 पर क्लिक करें। MailItem को कक्षाओं की सूची नीचे स्क्रॉल करें। आपको 100 से अधिक तरीकों और गुणों की सूची दिखाई देगी। कुछ स्पष्ट हैं लेकिन आपको कई लोगों के उद्देश्य को खोजने के लिए वीबी सहायता का उपयोग करना होगा। विधियों का उपयोग करने के लिए answerD() का विस्तार करें या उन गुणों को प्रदर्शित करें जो आपको लगता है कि उपयोगी हो सकता है।

उत्तर() एक विकास सहायता है लेकिन यह आपके मैक्रो के लिए संरचना भी प्रदान करता है। वर्तमान में यह एक फ़ोल्डर के भीतर मेल आइटम के पाठ और एचटीएमएल निकायों को डिस्क करने के लिए आउटपुट करता है। आप इस समय ऐसा नहीं करना चाहते हैं लेकिन आप कर सकते हैं। मैं अपने सभी ईमेल एक्सेल में संग्रहीत करता हूं। मैं प्रति ईमेल एक पंक्ति बनाता हूं जिसमें प्रेषक, प्राप्तकर्ता, विषय, तिथियां इत्यादि के लिए कॉलम होते हैं। मैं टेक्स्ट बॉडी, एचटीएमएल बॉडी और डिस्क पर किसी भी अनुलग्नक को सहेजता हूं और उन्हें हाइपरलिंक बना देता हूं। मेरे पास कई Outlook इंस्टॉलेशन से कई वर्षों तक ईमेल चल रहा है।

उत्तर F1() आपको दिखाता है कि एक नई एक्सेल कार्यपुस्तिका कैसे बनाएं और answerF2() आपको एक मौजूदा एक्सेल कार्यपुस्तिका को खोलने का तरीका दिखाता है। मुझे लगता है कि उत्तरफ 2() आपको चाहिए।

यहां बहुत कुछ है लेकिन यदि आप इसके माध्यम से काम करते हैं तो आप आउटलुक ऑब्जेक्ट मॉडल और अपना उद्देश्य कैसे प्राप्त कर सकते हैं।

स्वास्थ्य संबंधी चेतावनी इस जवाब में

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

मुझे संदेह है कि मुझे प्राप्त ज्ञान की एक प्रमुख विशेषता यह है कि यह कई अलग-अलग प्रतिष्ठानों पर आधारित है। सामना की गई कुछ समस्याएं स्थापना गलतियों का परिणाम हो सकती हैं जो बताएगी कि क्यों संदर्भ पुस्तक लेखकों को उनके बारे में पता नहीं था।

नीचे कोड Excel 2003 और Outlook Exchange 2003 और 2007

साथ परीक्षण किया गया है आरंभ कर रहे हैं, तो आप Outlook VBA

खोलें "आउटलुक" या "आउटलुक एक्सचेंज" के साथ अपरिचित हैं। ये मैक्रोज़ "आउटलुक एक्सप्रेस" के साथ काम नहीं करते हैं।

टूलबार से, टूल्स, मैक्रो, सुरक्षा का चयन करें। सुरक्षा स्तर को "मध्यम" में बदलें यदि यह पहले से ही उस स्तर पर नहीं है। इसका मतलब है कि मैक्रोज़ चलाया जा सकता है लेकिन केवल आपकी स्पष्ट स्वीकृति के साथ।

आउटलुक वीबी संपादक या तो शुरू करने के लिए:

1) उपकरण पट्टी, टूल, मैक्रो, मैक्रो से या Alt + F11 2) पर क्लिक करें, मैक्रो सक्षम करें।

टूल बार से, सम्मिलित करें, मॉड्यूल का चयन करें।

आप एक, दो या तीन विंडो देख सकते हैं। बाएं नीचे परियोजना एक्सप्लोरर होना चाहिए। आपको आज इसकी आवश्यकता नहीं है, लेकिन, यदि यह गुम है, तो इसे प्रदर्शित करने के लिए Ctrl + R पर क्लिक करें। दाईं तरफ, शीर्ष पर, वह क्षेत्र है जिसमें आप कोड डाल देंगे। नीचे आपको तत्काल विंडो देखना चाहिए। यदि तत्काल विंडो गुम है, तो इसे प्रदर्शित करने के लिए Ctrl + G पर क्लिक करें। नीचे दिए गए मैक्रोज़ आउटपुट के लिए तत्काल विंडो का उपयोग करते हैं ताकि आप इसे देख सकें।

कर्सर कोड क्षेत्र में होगा।

दर्ज करें: विकल्प स्पष्ट।

यह वीबी संपादक को यह जांचने के लिए निर्देश देता है कि सभी चर परिभाषित किए गए हैं। नीचे दिया गया कोड परीक्षण किया गया है लेकिन यह आपके द्वारा दर्ज किए जा सकने वाले किसी भी कोड में एक प्रकार की त्रुटि से बचाता है।

एक-एक करके, कोड क्षेत्र में नीचे मैक्रोज़ कॉपी और पेस्ट करें।

मैक्रोज़ उत्तरसी(), उत्तर डी(), उत्तर (ई), उत्तर F1() और उत्तर F2() को चलाने से पहले कुछ संशोधन की आवश्यकता होगी। मैक्रो के भीतर निर्देश।

मैक्रो चलाने के लिए, कर्सर को इसके अंदर रखें और F5 दबाएं।

फ़ोल्डरों के शीर्ष स्तर तक पहुंचना शीर्ष दो फ़ोल्डर स्तरों

प्रकार फ़ोल्डर के हैं। सभी उपफोल्डर्स प्रकार MAPIFolder हैं। मैंने सबफ़ोल्डर को प्राप्त करने के साधन के अलावा शीर्ष स्तर तक पहुंचने का प्रयास नहीं किया है।

उत्तर ए() को Outlook Exchange डेटाबेस तक पहुंच प्राप्त होती है और तत्काल विंडो में शीर्ष स्तर फ़ोल्डरों के नाम आउटपुट करती है।

Sub AnswerA() 

    Dim InxIFLCrnt As Integer 
    Dim TopLvlFolderList As Folders 

    Set TopLvlFolderList = _ 
      CreateObject("Outlook.Application").GetNamespace("MAPI").Folders 

    For InxIFLCrnt = 1 To TopLvlFolderList.Count 
    Debug.Print TopLvlFolderList(InxIFLCrnt).Name 
    Next 

End Sub 

उत्तरबी() शीर्ष स्तर के फ़ोल्डरों और उनके तत्काल बच्चों के नाम आउटपुट करता है।

Sub AnswerB() 

     Dim InxIFLCrnt As Integer 
     Dim InxISLCrnt As Integer 
     Dim SndLvlFolderList As MAPIFolder 
     Dim TopLvlFolderList As Folders 

     Set TopLvlFolderList = _ 
      CreateObject("Outlook.Application").GetNamespace("MAPI").Folders 

     For InxIFLCrnt = 1 To TopLvlFolderList.Count 
     Debug.Print TopLvlFolderList(InxIFLCrnt).Name 
     Set SndLvlFolderList = TopLvlFolderList.Item(InxIFLCrnt) 
     For InxISLCrnt = 1 To SndLvlFolderList.Folders.Count 
      Debug.Print " " & SndLvlFolderList.Folders(InxISLCrnt).Name 
     Next 
     Next 

End Sub 

AnswerB साथ समस्या यह है() है कि बच्चों को बच्चों को किसी भी गहराई तक के बच्चों के हो सकता है कर सकते हैं। आपको गहराई से एक विशेष फ़ोल्डर खोजने में सक्षम होना चाहिए।

नामित खोजें फ़ोल्डर

आप इस तरह के "इनबॉक्स" या "भेजे गए आइटम" क्या आप इस कोड की जरूरत नहीं होगी के रूप में एक डिफ़ॉल्ट फ़ोल्डर खोज करना चाहते हैं। यदि आप एक अलग फ़ोल्डर में टेबल वाले संदेश कॉपी करते हैं तो आपको इस कोड की आवश्यकता होगी। यहां तक ​​कि यदि आप तय करते हैं कि आपको अब इस कोड की आवश्यकता नहीं है, तो मेरा सुझाव है कि यदि आप भविष्य में इसकी आवश्यकता हो तो इसे जारी रखें।

नीचे दिया गया कोड दो उप-दिनचर्या का उपयोग करता है। कॉलर एक फ़ोल्डर नाम जैसे "पर्सनल फ़ोल्डर्स | मेलबॉक्स | इनबॉक्स" को इकट्ठा करता है। उप-दिनचर्या पदानुक्रम को कम करती है और यदि आवश्यक हो तो आवश्यक फ़ोल्डर को ऑब्जेक्ट के रूप में वापस कर दें।

नोट: "इनबॉक्स" या "प्रेषित आइटम" जैसे किसी डिफ़ॉल्ट फ़ोल्डर को ढूंढने का विशेष मामला बाद में चर्चा की जाती है।

Sub AnswerC1() 

    ' This routine wants a folder. It does nothing but display its name. 

    Dim FolderNameTgt As String 
    Dim FolderTgt As MAPIFolder 

    ' The names of each folder down to the one required separated 
    ' by a character not used in folder names. 
    ' ############################################################## 
    ' Replace "Personal Folders|MailBox|Inbox" with the name 
    ' of one of your folders. If you use "|" in your folder names, 
    ' pick a different separator and change the call of AnswerC2(). 
    ' ############################################################## 
    FolderNameTgt = "Personal Folders|MailBox|Inbox" 

    Call AnswerC2(FolderTgt, FolderNameTgt, "|") 
    If FolderTgt Is Nothing Then 
    Debug.Print FolderNameTgt & " not found" 
    Else 
    Debug.Print FolderNameTgt & " found: " & FolderTgt.Name 
    End If 

End Sub 

Sub AnswerC2(ByRef FolderTgt As MAPIFolder, NameTgt As String, NameSep As String) 

    ' This routine initialises the search and finds the top level folder 

    Dim InxFolderCrnt As Integer 
    Dim NameChild As String 
    Dim NameCrnt As String 
    Dim Pos As Integer 
    Dim TopLvlFolderList As Folders 

    Set FolderTgt = Nothing ' Target folder not found 

    Set TopLvlFolderList = _ 
      CreateObject("Outlook.Application").GetNamespace("MAPI").Folders 

    ' Split NameTgt into the name of folder at current level 
    ' and the name of its children 
    Pos = InStr(NameTgt, NameSep) 
    If Pos = 0 Then 
    ' I need at least a level 2 name 
    Exit Sub 
    End If 
    NameCrnt = Mid(NameTgt, 1, Pos - 1) 
    NameChild = Mid(NameTgt, Pos + 1) 

    ' Look for current name. Drop through and return nothing if name not found. 
    For InxFolderCrnt = 1 To TopLvlFolderList.Count 
    If NameCrnt = TopLvlFolderList(InxFolderCrnt).Name Then 
     ' Have found current name. Call AnswerC3() to look for its children 
     Call AnswerC3(TopLvlFolderList.Item(InxFolderCrnt), _ 
              FolderTgt, NameChild, NameSep) 
     Exit For 
    End If 
    Next 

End Sub 

Sub AnswerC3(FolderCrnt As MAPIFolder, ByRef FolderTgt As MAPIFolder, _ 
             NameTgt As String, NameSep As String) 

    ' This routine finds all folders below the top level 

    Dim InxFolderCrnt As Integer 
    Dim NameChild As String 
    Dim NameCrnt As String 
    Dim Pos As Integer 

    ' Split NameTgt into the name of folder at current level 
    ' and the name of its children 
    Pos = InStr(NameTgt, NameSep) 
    If Pos = 0 Then 
    NameCrnt = NameTgt 
    NameChild = "" 
    Else 
    NameCrnt = Mid(NameTgt, 1, Pos - 1) 
    NameChild = Mid(NameTgt, Pos + 1) 
    End If 

    ' Look for current name. Drop through and return nothing if name not found. 
    For InxFolderCrnt = 1 To FolderCrnt.Folders.Count 
    If NameCrnt = FolderCrnt.Folders(InxFolderCrnt).Name Then 
     ' Have found current name. 
     If NameChild = "" Then 
     ' Have found target folder 
     Set FolderTgt = FolderCrnt.Folders(InxFolderCrnt) 
     Else 
     'Recurse to look for children 
     Call AnswerC3(FolderCrnt.Folders(InxFolderCrnt), _ 
              FolderTgt, NameChild, NameSep) 
     End If 
     Exit For 
    End If 
    Next 

End Sub 

एक लक्ष्य फ़ोल्डर की जांच

AnswerC2() और AnswerC3() एक लक्ष्य फ़ोल्डर खोजने के लिए कोड प्रदान करता है। फ़ोल्डर में आइटम होते हैं: मेल आइटम, मीटिंग अनुरोध, संपर्क, कैलेंडर प्रविष्टियां और बहुत कुछ। इस कोड द्वारा केवल मेल आइटम की जांच की जाती है। मीटिंग अनुरोधों तक पहुंच अनिवार्य रूप से वही है लेकिन उनके पास अलग-अलग गुण हैं।

उत्तर डी() मेल आइटम की संपत्तियों का चयन आउटपुट करता है।

फ़ोल्डरों के चयन पर answerD() का प्रयास करने के बाद, टूल बार से F2 दबाएं, देखें, ऑब्जेक्ट ब्राउज़र चुनें। जब तक आप MailItem तक नहीं पहुंच जाते तब तक आइटम की सूची नीचे स्क्रॉल करें। सदस्यों का क्षेत्र अपनी सभी संपत्तियों और विधियों को प्रदर्शित करेगा जिनमें से 100 से अधिक हैं। कुछ बहुत स्पष्ट हैं; सबसे अधिक आपको वीबी सहायता में देखना होगा। अधिक गुणों और विधियों और शायद अन्य प्रकार के आइटम का पता लगाने के लिए इस दिनचर्या में संशोधन करें।

चेतावनी। यह कोड मेल आइटम्स के लिए नामित फ़ोल्डर को देखने के लिए डिज़ाइन किया गया है। यदि आप पूरे फ़ोल्डर पदानुक्रम का पता लगाने के लिए कोड में संशोधन करते हैं तो आपको समस्याएं आ सकती हैं। यह मेरी गलती हो सकती थी या यह स्थापना में दोष हो सकता था लेकिन मुझे पता चला है कि अगर मैं "आरएसएस फ़ीड" जैसे कुछ फ़ोल्डरों तक पहुंचने का प्रयास करता हूं तो मेरा कोड क्रैश हो जाता है। मैंने कभी भी इन दुर्घटनाओं का पता लगाने के लिए पर्याप्त दिलचस्पी नहीं ली है और चयनित नामों वाली शाखाओं को अनदेखा करने के लिए मेरी पेड़ खोज में संशोधन किया है।

जब आप इस मैक्रो को चलाते हैं, तो आपको एक चेतावनी मिल जाएगी: "एक प्रोग्राम Outlook में संग्रहीत ई-मेल पते तक पहुंचने का प्रयास कर रहा है। क्या आप इसे अनुमति देना चाहते हैं?" "पहुंच के लिए अनुमति दें" पर टिकटें, अंतराल का चयन करें, और हाँ पर क्लिक करें।

Sub AnswerD() 

    Dim FolderItem As Object 
    Dim FolderItemClass As Integer 
    Dim FolderNameTgt As String 
    Dim FolderTgt As MAPIFolder 
    Dim InxAttach As Integer 
    Dim InxItemCrnt As Integer 

    ' ############################################################## 
    ' Replace "Personal Folders|MailBox|Inbox" with the name 
    ' of one of your folders. If you use "|" in your folder names, 
    ' pick a different separator and change the call of AnswerC2(). 
    ' ############################################################## 
    FolderNameTgt = "Personal Folders|MailBox|Inbox" 

    Call AnswerC2(FolderTgt, FolderNameTgt, "|") 
    If FolderTgt Is Nothing Then 
    Debug.Print FolderNameTgt & " not found" 
    Else 
    ' Display mail items, if any, within folder 
    Debug.Print "Mail items within " & FolderNameTgt 
    For InxItemCrnt = 1 To FolderTgt.Items.Count 
     Set FolderItem = FolderTgt.Items.Item(InxItemCrnt) 

     With FolderItem 

     ' This code seems to avoid syncronisation errors 
     FolderItemClass = 0 
     On Error Resume Next 
     FolderItemClass = .Class 
     On Error GoTo 0 

     If FolderItemClass = olMail Then 
      ' Display Received date, Attachment count and Subject 
      Debug.Print " Mail item: " & InxItemCrnt 
      Debug.Print " Received=" & Format(.ReceivedTime, _ 
         "ddmmmyy hh:mm:ss") & " " & _ 
         .Attachments.Count & _ 
         " attachments Subject = " & .Subject 
      Debug.Print " Sender: " & .SenderName 
      With .Attachments 
      ' If the are attachments display their types and names 
      If .Count > 0 Then 
       Debug.Print " Attachments:" 
       For InxAttach = 1 To .Count 
       With .Item(InxAttach) 
        Debug.Print "  Type="; 
        Select Case .Type 
        Case olByReference 
         Debug.Print "ByRef"; 
        Case olByValue 
         Debug.Print "ByVal"; 
        Case olEmbeddeditem 
         Debug.Print "Embed"; 
        Case olOLE 
         Debug.Print " OLE"; 
        End Select 
        Debug.Print " DisplayName=" & .DisplayName 
       End With 
       Next 
      End If 
      End With 
     End If 
     End With 
    Next InxItemCrnt 
    End If 

End Sub 

डिस्क को निकायों सहेजा जा रहा है

answere() अपनी पसंद का एक फ़ोल्डर पाता है और यह के भीतर हर मेल आइटम के पाठ और html निकायों की एक प्रति बचाता है। मेरा सुझाव है कि आप एक नए फ़ोल्डर में तालिका वाले संदेशों का चयन करें और उत्तर E() चलाएं। यह आपके प्रश्नों के लिए सीधे प्रासंगिक नहीं है लेकिन मुझे विश्वास है कि यह समझ में सहायता करेगा।

जब आप इस मैक्रो को चलाते हैं, तो आपको एक चेतावनी मिल जाएगी: "एक प्रोग्राम Outlook में संग्रहीत ई-मेल पते तक पहुंचने का प्रयास कर रहा है। क्या आप इसे अनुमति देना चाहते हैं?" "पहुंच के लिए अनुमति दें" पर टिकटें, अंतराल का चयन करें, और हाँ पर क्लिक करें।

Sub AnswerE() 

    ' Output any Text or HTML bodies found within specified folder 

    Dim FolderItem As Object 
    Dim FolderItemClass As Integer 
    Dim FolderNameTgt As String 
    Dim FolderTgt As MAPIFolder 
    Dim FileSystem As Object 
    Dim FileSystemFile As Object 
    Dim HTMLBody As String 
    Dim InxAttach As Integer 
    Dim InxItemCrnt As Integer 
    Dim PathName As String 
    Dim TextBody As String 

    ' ############################################################## 
    ' Replace "Personal Folders|MailBox|Inbox" with the name 
    ' of one of your folders. If you use "|" in your folder names, 
    ' pick a different separator and change the call of AnswerC2(). 
    ' The folder you pick must have at least one mail item with an 
    ' HTML body for this macro to do anything. 
    ' ############################################################## 
    FolderNameTgt = "Personal Folders|MailBox|Inbox" 

    Call AnswerC2(FolderTgt, FolderNameTgt, "|") 
    If FolderTgt Is Nothing Then 
    Debug.Print FolderNameTgt & " not found" 
    Exit Sub 
    End If 

    ' #################################################################### 
    ' The following is an alternative method of accessing a default folder 
    ' such as Inbox. This statement would replace the code above. 
    ' Set FolderTgt = CreateObject("Outlook.Application"). _ 
    '   GetNamespace("MAPI").GetDefaultFolder(olFolderInbox) 
    ' #################################################################### 

    ' Extract bodies if found 

    Set FileSystem = CreateObject("Scripting.FileSystemObject") 

    ' ############################################################## 
    ' Replace "C:\Email\" with the name of one of your folders 
    ' ############################################################## 
    PathName = "C:\Email\" 

    For InxItemCrnt = 1 To FolderTgt.Items.Count 
    Set FolderItem = FolderTgt.Items.Item(InxItemCrnt) 

    With FolderItem 

     ' This code seems to avoid syncronisation errors 
     FolderItemClass = 0 
     On Error Resume Next 
     FolderItemClass = .Class 
     On Error GoTo 0 

     If FolderItemClass = olMail Then 
     HTMLBody = Trim(.HTMLBody) 
     If HTMLBody <> "" Then 
      ' Save HTML body to disc. The file name is of the form 
      ' BodyNNN.html where NNN is a a sequence number. 
      ' First True in CreateTextFile => overwrite existing file. 
      ' Second True => Unicode format 
      Set FileSystemFile = FileSystem.CreateTextFile(PathName & _ 
        "Body" & Right("00" & InxItemCrnt, 3) & _ 
           ".html", True, True) 
      FileSystemFile.Write HTMLBody 
      FileSystemFile.Close 
     End If 
     TextBody = Trim(.Body) 
     If HTMLBody <> "" Then 
      ' Save text body to disc. The file name is of the form 
      ' BodyNNN.txt where NNN is a a sequence number. 
      Set FileSystemFile = FileSystem.CreateTextFile(PathName & _ 
        "Body" & Right("00" & InxItemCrnt, 3) & _ 
           ".txt", True, True) 
      FileSystemFile.Write TextBody 
      FileSystemFile.Close 
     End If 
     End If 
    End With 

    Next InxItemCrnt 

End Sub 

बनाना या एक Excel कार्यपुस्तिका

आप कहते हैं कि नहीं है, तो आप एक नया Excel कार्यपुस्तिका बनाते हैं या मौजूदा एक अद्यतन करेगा अद्यतन करने। उत्तर F1() एक कार्यपुस्तिका बनाता है। AnswerF2() एक मौजूदा कार्यपुस्तिका खोलता है।

इन मैक्रो तो आपको दोनों में से किसी की कोशिश कर रहा से पहले:

  • आउटलुक VBA संपादक उपकरण पट्टी से, टूल के भीतर से।
  • संदर्भों का चयन करें।
  • माइक्रोसॉफ्ट एक्सेल 11.0 ऑब्जेक्ट लाइब्रेरी पर नीचे स्क्रॉल करें और इसके खिलाफ बॉक्स को चेक करें।

Sub AnswerF1() 

    Dim xlApp As Excel.Application 
    Dim ExcelWkBk As Excel.Workbook 
    Dim FileName As String 
    Dim PathName As String 

    ' ############################################################## 
    ' Replace "C:\Email\" with the name of one of your folders 
    ' Replace "MyWorkbook.xls" with the your name for the workbook 
    ' ############################################################## 
    PathName = "C:\Email\" 
    FileName = "MyWorkbook.xls" 

    Set xlApp = Application.CreateObject("Excel.Application") 
    With xlApp 
    .Visible = True   ' This slows your macro but helps during debugging 
    Set ExcelWkBk = xlApp.Workbooks.Add 
    With ExcelWkBk 

     ' Add Excel VBA code to update workbook here 

     .SaveAs FileName:=PathName & FileName 
     .Close 
    End With 
    .Quit 
    End With 
End Sub 
Sub AnswerF2() 

    Dim xlApp As Excel.Application 
    Dim ExcelWkBk As Excel.Workbook 
    Dim FileName As String 
    Dim PathName As String 

    ' ############################################################## 
    ' Replace "C:\Email\" with the name of one of your folders 
    ' Replace "MyWorkbook.xls" with the your name for the workbook 
    ' ############################################################## 
    PathName = "C:\Email\" 
    FileName = "MyWorkbook.xls" 

    Set xlApp = Application.CreateObject("Excel.Application") 
    With xlApp 
    .Visible = True   ' This slows your macro but helps during debugging 
    Set ExcelWkBk = xlApp.Workbooks.Open(PathName & FileName) 
    With ExcelWkBk 

     ' Add Excel VBA code to update workbook here 

     .Save 
     .Close 
    End With 
    End With 
End Sub 

Excel कार्यपुस्तिका

इस कोड को अगले मुक्त पंक्ति आप में कार्यपुस्तिका पाता है और इसे करने के लिए लिखते हैं करने के लिए लिख रहा है। मैं समझाता हूं कि स्थिरांक उपयोगी क्यों हैं और आपको अपना Outlook और Excel कोड अलग रखने के बारे में चेतावनी देते हैं।

' Constants allow you alter the sequence of columns in your workbook without 
' having to change your code. Replace the 1, 2 and 3 in these statements 
' and the job is done. 
' !!! Constants must be above any subroutines and functions. 

Public Const ColFrom As Integer = 1 
Public Const ColSubject As Integer = 2 
Public Const ColSentDate As Integer = 3 

Sub AnswerG() 

    Dim RowNext As Integer 

    ' This code goes at the top of your macro 
    With Sheets("Sheet1")  ' Replace with the name of your worksheet 
    ' This finds the bottom row with a value in column A. It then adds 1 to get 
    ' the number of the first unused row. 
    RowNext = .Cells(Rows.Count, "A").End(xlUp).Row + 1 
    End With 

    ' You will have to separate your Outlook and Excel code. 
    ' With Outlook 
    ' Var1 = .Body 
    ' Var2 = .ReceivedTime 
    ' Var3 = .SenderName 
    ' End With 
    ' With Excel 
    ' .Cell(R, C).Value = Var1 
    ' End With 

    With Sheets("Sheet1")  ' Replace with the name of your worksheet 

    .Cells(RowNext, ColFrom).Value = "John Smith" 
    .Cells(RowNext, ColSubject).Value = "Our meeting" 
    With .Cells(RowNext, ColSentDate) 
     .Value = Now() 
     ' This format means the time is stored and I can access it but it 
     'is not displayed. Change to "mm/dd/yy" or whatever you like. 
     .NumberFormat = "d mmm yy" 
    End With 
    RowNext = RowNext + 1 ' Ready for next loop 

    End With 

End Sub 

सारांश

मुझे आशा है कि मैं विस्तार के एक उचित स्तर प्रदान की है। किसी भी तरह से टिप्पणी के साथ प्रतिक्रिया दें।

अंतिम मैक्रोज़ पर छलांग न लगाएं। अगर कुछ गलत हो जाता है तो आप कारण को समझ नहीं पाएंगे। पहले के उत्तरों के साथ खेलने के लिए समय निकालें। उन्हें थोड़ा अलग करने के लिए संशोधित करें।

शुभकामनाएं। आप आश्चर्यचकित होंगे कि आप Outlook और VBA के साथ कितनी जल्दी सहज हो जाएंगे।

+6

* "मुझे उम्मीद है कि मैंने एक उचित स्तर का विवरण प्रदान किया है" * - यदि ओपी ने कहा तो मैं बहुत चिंतित हूं .... +1 – brettdj

+0

धन्यवाद लेकिन मैं सूचना अधिभार के बारे में चिंतित हूं। यदि ओपी भयभीत नहीं होता है और धीरे-धीरे इसके माध्यम से काम करता है तो उन्हें यहां चाहिए। –

+0

आपके त्वरित उत्तर के लिए धन्यवाद। मैं यहां वर्णित एक के रूप में एक की जांच करूँगा। मुझे आपके द्वारा दी गई शैली पसंद है। एक बार फिर धन्यवाद और जल्द ही मेरे परिणामों के साथ वापस आ जाएगा .... – Sree

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