परिचय
इस उत्तर के पहले संस्करण में में, मैं तुम्हें एक और सवाल जो मैं अब जानते हैं कि आप पढ़ने के लिए सक्षम नहीं होगा करने के लिए भेजा।
आपको जो भी कोड चाहिए वह यहां है लेकिन यह तत्काल समाधान के रूप में नहीं लिखा गया है। यह एक ट्यूटोरियल है जो आपको 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 के साथ कितनी जल्दी सहज हो जाएंगे।
स्क्रैच से लिखने के लिए यह कोड का एक महत्वपूर्ण हिस्सा है - यदि आप उस लिंक से कोड पोस्ट करते हैं जिसे आपने संदर्भित किया है और जो आपने आज तक करने की कोशिश की है, तो यह एक बेहतर सवाल होगा। – brettdj