दिलचस्प पोस्ट
मैं डब्ल्यूपीएफ में डीपीआई कैसे प्राप्त करूं? पहले से निर्मित तालिका में ऑरेकल में आटोकरिकमेंट PHP संकेतन में मेरे नंबर को छपाई क्यों कर रहा है, जब मैंने इसे .000021 के रूप में निर्दिष्ट किया था? जावा प्रोग्राम को एक और जावा प्रोग्राम से चलाया जा रहा है क्या कोई मुफ्त एक्सएमएल डिफ / मर्ज टूल्स उपलब्ध है? पासवर्ड के लिए स्ट्रिंग के ऊपर चार पसंदीदा क्यों हैं? नेक्सस 4 एमटीपी के माध्यम से फाइल नहीं दिखा रहा है अपाचे स्पार्क 1.3 में डाटा फ़्रेम में एक कॉलम जोड़ें PHP स्क्रिप्ट वास्तव में कैसे निष्पादित है? अंडर-नास्टीक स्कीइसिंग ऑफ एनड्रयर्स पर एमएफसी प्रोग्रामिंग सीखने के लिए किसी और चीज की पंडों से जटिल मानदंडों के साथ चयन करना। डेटाफ़्रेम एक पूर्णांक वापसी 0.0 द्वारा एक फ्लोट को विभाजित क्यों करता है? क्या केवल जावास्क्रिप्ट का उपयोग करने के लिए डेटा लिखना संभव है? कैसे रनटाइम में WPF छवि को लोड करने के लिए?

Outlook में डिफ़ॉल्ट हस्ताक्षर कैसे जोड़ें

मैं प्रवेश में एक VBA स्क्रिप्ट लिख रहा हूं जो कुछ दर्जन ईमेल बनाता है और स्वत: भरता है यह अब तक चिकनी कोडिंग रहा है, लेकिन मैं आउटलुक के लिए नया हूँ मेलिटम ऑब्जेक्ट बनाने के बाद, मैं ईमेल में डिफ़ॉल्ट हस्ताक्षर कैसे जोड़ूं ?

  1. यह डिफ़ॉल्ट हस्ताक्षर होगा जो कि एक नया ईमेल बनाने के दौरान स्वचालित रूप से जोड़ा जाता है

  2. आदर्श रूप में, मैं सिर्फ ObjMail.GetDefaultSignature उपयोग करना चाहते हैं, लेकिन मुझे इसके जैसा कुछ भी नहीं मिल सकता है

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

     Function GetBoiler(ByVal sFile As String) As String 'Dick Kusleika Dim fso As Object Dim ts As Object Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2) GetBoiler = ts.readall ts.Close End Function 

    ( getboiler(SigString = "C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt")

संपादित करें

जेपी (टिप्पणियां देखें) के लिए धन्यवाद, मुझे पता है कि डिफ़ॉल्ट हस्ताक्षर पहले दिखाई दे रहा है, लेकिन जब मैं ईमेल पर तालिका जोड़ने के लिए HTMLBody का उपयोग करता हूं तो यह गायब हो जाता है इसलिए मुझे लगता है कि मेरा प्रश्न अब है: मैं डिफ़ॉल्ट हस्ताक्षर कैसे प्रदर्शित करूं और फिर भी एक HTML तालिका प्रदर्शित करूँ?

 Sub X() Dim OlApp As Outlook.Application Dim ObjMail As Outlook.MailItem Set OlApp = Outlook.Application Set ObjMail = OlApp.CreateItem(olMailItem) ObjMail.BodyFormat = olFormatHTML ObjMail.Subject = "Subject goes here" ObjMail.Recipients.Add "Email goes here" ObjMail.HTMLBody = ObjMail.Body & "HTML Table goes here" ObjMail.Display End Sub 

वेब के समाधान से एकत्रित समाधान "Outlook में डिफ़ॉल्ट हस्ताक्षर कैसे जोड़ें"

नीचे दिए गए कोड एक आउटलुक संदेश बनाएंगे और ऑटो हस्ताक्षर बनाएंगे

 Dim OApp As Object, OMail As Object, signature As String Set OApp = CreateObject("Outlook.Application") Set OMail = OApp.CreateItem(0) With OMail .Display End With signature = OMail.body With OMail '.To = "someone@somedomain.com" '.Subject = "Type your email subject here" '.Attachments.Add .body = "Add body text here" & vbNewLine & signature '.Send End With Set OMail = Nothing Set OApp = Nothing 

मेरा समाधान पहले एक खाली संदेश प्रदर्शित करना है (डिफ़ॉल्ट हस्ताक्षर के साथ!) और मौजूदा HTMLBody में इच्छित strHTMLBody को HTMLBody

यदि PowerUser राज्यों की तरह, HTMLBody को संपादित करते समय हस्ताक्षर समाप्त हो जाता है, तो आप ObjMail की सामग्री को संग्रहीत करने पर विचार कर सकते हैं। ObjMail.HTMLBody को फिर से ObjMail.Display बाद चर strTemp में strTemp बाद में ObjMail.Display और इसके बाद ObjMail.Display जोड़ें लेकिन यह आवश्यक नहीं होना चाहिए।

 Sub X(strTo as string, strSubject as string, strHTMLBody as string) Dim OlApp As Outlook.Application Dim ObjMail As Outlook.MailItem Set OlApp = Outlook.Application Set ObjMail = OlApp.CreateItem(olMailItem) ObjMail.To = strTo ObjMail.Subject = strSubject ObjMail.Display 'You now have the default signature within ObjMail.HTMLBody. 'Add this after adding strHTMLBody ObjMail.HTMLBody = strHTMLBody & ObjMail.HTMLBody 'ObjMail.Send 'send immediately or 'ObjMail.close olSave 'save as draft 'Set OlApp = Nothing End sub 
 Dim OutApp As Object, OutMail As Object, LogFile As String Dim cell As Range, S As String, WMBody As String, lFile As Long S = Environ("appdata") & "\Microsoft\Signatures\" If Dir(S, vbDirectory) <> vbNullString Then S = S & Dir$(S & "*.htm") Else S = "" S = CreateObject("Scripting.FileSystemObject").GetFile(S).OpenAsTextStream(1, -2).ReadAll WMBody = "<br>Hi All,<br><br>" & _ "Last line,<br><br>" & S 'Add the Signature to end of HTML Body 

बस सोचा कि मैं यह कैसे हासिल होगा साझा करेंगे। यह निश्चित नहीं है कि परिभाषित वैरिएबल की समझ में यह सही है, लेकिन यह पढ़ना आसान और आसान है जो मुझे पसंद है।

मैं ऑब्जेक्ट आउटलुक के भीतर एचटीएमएलबीडी को WMBody संलग्न करता हूं। एप्लीकेशन ओएलई।

आशा है कि यह किसी को मदद करता है

धन्यवाद, वेस

जब आप MailItem.Display (जो संदेश स्क्रीन पर प्रदर्शित होता है) को MailItem.GetInspector हैं या जब आप MailItem.GetInspector प्रॉपर्टी तक MailItem.GetInspector हैं – तो MailItem.GetInspector नए अपरिवर्तित संदेशों में हस्ताक्षर जोड़ता है (आपको उससे पहले शरीर को संशोधित नहीं करना चाहिए) – आप करते हैं लौटा इंस्पेक्टर ऑब्जेक्ट के साथ कुछ भी नहीं करना है, लेकिन आउटलुक संदेश बॉडी को हस्ताक्षर के साथ पॉप्युलेट करेगा।

हस्ताक्षर जोड़े जाने के बाद, HTMLBody संपत्ति को पढ़ें और उसे HTML स्ट्रिंग के साथ मर्ज करें जिसे आप सेट करने का प्रयास कर रहे हैं। ध्यान दें कि आप केवल 2 HTML स्ट्रिंग्स को जोड़ नहीं सकते – तार को विलय करने की आवश्यकता है। यदि आप HTML स्ट्रिंग के शीर्ष पर अपनी स्ट्रिंग सम्मिलित करना चाहते हैं, तो "<body" सबस्ट्रिंग को ढूंढें, फिर ">" की अगली घटना को ढूंढें (यह <body> तत्वों के साथ विशेषता का ख्याल रखता है), फिर डालें उस ">" के बाद आपकी HTML स्ट्रिंग

आउटलुक ऑब्जेक्ट मॉडल सभी पर हस्ताक्षर नहीं दिखाता है।

सामान्य नोट पर, हस्ताक्षर का नाम IOlkAccountManager विस्तारित एमएपीआई इंटरफ़ेस के माध्यम से पहुंच योग्य खाता प्रोफाइल डेटा में जमा हो जाता है। चूंकि उस इंटरफ़ेस को विस्तारित एमएपीआई है, इसलिए इसे केवल सी ++ या डेल्फी का उपयोग कर लिया जा सकता है। IOlkAccountManager बटन पर क्लिक करने पर आप इंटरफ़ेस और उसके डेटा को OutlookSpy में देख सकते हैं
आपके हस्ताक्षर नाम के बाद, आप फ़ाइल सिस्टम से HTML फ़ाइल पढ़ सकते हैं (ध्यान रखें कि फ़ोल्डर का नाम (अंग्रेज़ी में हस्ताक्षर) स्थानीयकृत है
यह भी ध्यान रखें कि यदि हस्ताक्षर छवियाँ हैं, तो संदेश को संलग्नक और <img> टैग के रूप में हस्ताक्षर / संदेश बॉडी में समायोजित किया जाना चाहिए ताकि हस्ताक्षर फ़ोल्डर के उप-फ़ोल्डर के बजाय अनुलग्नक के लिए src विशेषता को इंगित किया जा सके। जहां छवियाँ संग्रहीत हैं
यह भी आपकी जिम्मेदारी होगी कि HTML शैलियों को संदेश की शैली के साथ हस्ताक्षर HTML फ़ाइल से मर्ज करना होगा।

यदि मोचन का उपयोग करना एक विकल्प है, तो आप इसकी RDOAccount ऑब्जेक्ट (VBA सहित किसी भी भाषा में पहुंच योग्य) का उपयोग कर सकते हैं। नया संदेश हस्ताक्षर नाम 0x0016001F संपत्ति में जमा है, उत्तर हस्ताक्षर 0x0017001F आप RDOAccount का भी उपयोग कर सकते हैं ReplySignature और NewSignature गुण
रिडीमोशन आरडीओएसआईएग्नाचर को भी उजागर करता है विधि के लिए लागू करें जो सूचक सूचक को RDOMail ऑब्जेक्ट में लेता है और निर्दिष्ट स्थान पर हस्ताक्षर को ठीक से छवियों और शैलियां मर्ज करता है:

 set Session = CreateObject("Redemption.RDOSession") Session.MAPIOBJECT = Application.Session.MAPIOBJECT set Drafts = Session.GetDefaultFolder(olFolderDrafts) set Msg = Drafts.Items.Add Msg.To = "user@domain.demo" Msg.Subject = "testing signatures" Msg.HTMLBody = "<html><body>some <b>bold</b> message text</body></html>" set Account = Session.Accounts.GetOrder(2).Item(1) 'first mail account if Not (Account Is Nothing) Then set Signature = Account.NewMessageSignature if Not (Signature Is Nothing) Then Signature.ApplyTo Msg, false 'apply at the bottom End If End If Msg.Send 

संपादित करें : जुलाई 2017 तक, Outlook 2016 में MailItem.GetInspector अब हस्ताक्षर सम्मिलित नहीं करता है। केवल MailItem.Display करता है

मैंने इसे एक सामुदायिक विकी का उत्तर दिया है क्योंकि मैं इसे बिना किसी PowerUser के शोध और पहले की टिप्पणियों में सहायता के बिना बनाया है।

मैंने PowerUser के Sub X लिया और जोड़ा

 Debug.Print "n------" 'with different values for n Debug.Print ObjMail.HTMLBody 

प्रत्येक वक्तव्य के बाद इस से मुझे पता चला कि हस्ताक्षर अंदर नहीं है। .HTMLBody बाद तक ObjMail.Display और फिर केवल अगर मैं शरीर को कुछ भी नहीं जोड़ा है

मैं PowerUser के पहले समाधान पर वापस गया जो C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt") उपयोग किया गया था C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures\Mysig.txt") । PowerUser इस से नाखुश था क्योंकि वह उसका समाधान चाहते थे दूसरों के लिए काम करें जिनके पास अलग-अलग हस्ताक्षर होंगे

मेरा हस्ताक्षर एक ही फ़ोल्डर में है और मुझे इस फ़ोल्डर को बदलने का कोई विकल्प नहीं मिल रहा है। मेरे पास केवल एक हस्ताक्षर हैं, इसलिए इस फ़ोल्डर में एकमात्र एचटीएम फ़ाइल पढ़ कर मैंने अपना एकमात्र / डिफ़ॉल्ट हस्ताक्षर प्राप्त किया।

मैंने एक HTML तालिका बनाई और इसे तुरंत <body> तत्व के बाद हस्ताक्षर में डाल दिया और परिणाम के लिए html शरीर सेट कर दिया। मैंने अपने आप को ईमेल भेजा और नतीजे पूरी तरह से स्वीकार्य थे जो आपको मेरे स्वरूपण को पसंद करते हैं, जिसमें मैं यह जांचने के लिए शामिल था कि मैं कर सकता हूं।

मेरी संशोधित उपदंश है:

 Sub X() Dim OlApp As Outlook.Application Dim ObjMail As Outlook.MailItem Dim BodyHtml As String Dim DirSig As String Dim FileNameHTMSig As String Dim Pos1 As Long Dim Pos2 As Long Dim SigHtm As String DirSig = "C:\Users\" & Environ("username") & _ "\AppData\Roaming\Microsoft\Signatures" FileNameHTMSig = Dir$(DirSig & "\*.htm") ' Code to handle there being no htm signature or there being more than one SigHtm = GetBoiler(DirSig & "\" & FileNameHTMSig) Pos1 = InStr(1, LCase(SigHtm), "<body") ' Code to handle there being no body Pos2 = InStr(Pos1, LCase(SigHtm), ">") ' Code to handle there being no closing > for the body element BodyHtml = "<table border=0 width=""100%"" style=""Color: #0000FF""" & _ " bgColor=#F0F0F0><tr><td align= ""center"">HTML table</td>" & _ "</tr></table><br>" BodyHtml = Mid(SigHtm, 1, Pos2 + 1) & BodyHtml & Mid(SigHtm, Pos2 + 2) Set OlApp = Outlook.Application Set ObjMail = OlApp.CreateItem(olMailItem) ObjMail.BodyFormat = olFormatHTML ObjMail.Subject = "Subject goes here" ObjMail.Recipients.Add "my email address" ObjMail.Display End Sub 

चूंकि दोनों PowerUser और मुझे C:\Users\" & Environ("username") & "\AppData\Roaming\Microsoft\Signatures में हमारे हस्ताक्षर मिल चुके हैं, इसलिए मैं यह सुझाव देता हूं कि यह किसी भी आउटलुक स्थापना के लिए मानक स्थान है। क्या यह डिफ़ॉल्ट बदला जा सकता है? मुझे यह सुझाव देने के लिए कुछ भी नहीं मिल सकता है। उपरोक्त कोड को स्पष्ट रूप से कुछ विकास की आवश्यकता है लेकिन यह एक हस्ताक्षर के ऊपर एक HTML तालिका युक्त एक ईमेल निकाय बनाने के PowerUser के उद्देश्य को प्राप्त करता है।

मुझे एक तरह से पता चला है, लेकिन यह ज्यादातर के लिए बहुत ढीली हो सकती है। मुझे एक सरल डीबी मिल गया है और मैं चाहता हूं कि यह मेरे लिए ईमेल जेनरेट करने में सक्षम हो, तो मैं इसका इस्तेमाल नीचे और गंदे समाधान के लिए करता हूं:

मुझे पता चला कि शरीर के पाठ की शुरुआत एकमात्र जगह है जिसे मैं " <div class=WordSection1> " एक नई ईमेल के HTMLBody में देख रहा हूं, इसलिए मैंने एक सरल प्रतिस्थापित किया, प्रतिस्थापित किया

" <div class=WordSection1><p class=MsoNormal><o:p> "

साथ में

"<div class=WordSection1><p class=MsoNormal><o:p>" & sBody

जहां sBody शरीर की सामग्री है मैं चाहता हूँ डाला। अभी तक तो काम कर रहा है।

 .HTMLBody = Replace(oEmail.HTMLBody, "<div class=WordSection1><p class=MsoNormal><o:p>", "<div class=WordSection1><p class=MsoNormal><o:p>" & sBody) 

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

नीचे दिया गया दृष्टिकोण काफी लचीला है और अभी भी सरल है।

  Private Sub Add_Signature(ByVal addy as String, ByVal subj as String, ByVal body as String) Dim oMsg As MailItem Set oMsg = Application.CreateItem(olMailItem) oMsg.To = addy oMsg.Subject = subj oMsg.Body = body Dim sig As String ' Mysig is the name you gave your signature in the OL Options dialog sig = ReadSignature("Mysig.htm") oMsg.HTMLBody = Item.Body & "<p><BR/><BR/></p>" & sig ' oMsg.HTMLBody oMsg.Send Set oMsg = Nothing End Sub Private Function ReadSignature(sigName As String) As String Dim oFSO, oTextStream, oSig As Object Dim appDataDir, sig, sigPath, fileName As String appDataDir = Environ("APPDATA") & "\Microsoft\Signatures" sigPath = appDataDir & "\" & sigName Set oFSO = CreateObject("Scripting.FileSystemObject") Set oTextStream = oFSO.OpenTextFile(sigPath) sig = oTextStream.ReadAll ' fix relative references to images, etc. in sig ' by making them absolute paths, OL will find the image fileName = Replace(sigName, ".htm", "") & "_files/" sig = Replace(sig, fileName, appDataDir & "\" & fileName) ReadSignature = sig End Function 

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

आधार के रूप में @ मॉरिस मेनार्ड का जवाब का उपयोग करना https://stackoverflow.com/a/18455148/2337102 मुझे निम्नलिखित के माध्यम से जाना पड़ा:

टिप्पणियाँ:
आरंभ करने से पहले एक .htm फ़ाइल का बैक अप लें, कॉपी करें और द्वितीयक फ़ोल्डर में पेस्ट करें

  1. आप SignatureName.htm और SignatureName_files Folder दोनों के साथ काम करेंगे

  2. आपको HTML अनुभव की ज़रूरत नहीं है, फाइलें एक संपादन प्रोग्राम जैसे कि नोटपैड या नोटपैड ++ या आपके निर्दिष्ट HTML प्रोग्राम में खुलेंगे

  3. अपने हस्ताक्षर फ़ाइल स्थान पर जाएं (मानक C:\Users\"username"\AppData\Roaming\Microsoft\Signatures होना चाहिए C:\Users\"username"\AppData\Roaming\Microsoft\Signatures )

  4. एक टेक्स्ट / एचटीएम एडिटर में SignatureName.htm फ़ाइल खोलें (फ़ाइल पर ठीक क्लिक करें, "प्रोग्राम के साथ संपादन करें")

  5. Ctrl+F उपयोग करें और .png दर्ज करें; .jpg या यदि आप अपना छवि प्रकार नहीं जानते हैं, तो छवि का उपयोग करें आप कुछ देखेंगे: src="signaturename_files/image001.png"

  6. आपको उसे छवि स्थान के पूरे पते पर बदलना होगा C:\Users\YourName\AppData\Roaming\Microsoft\Signatures\SignatureNameFolder_files\image001
    या
    src="E:\location\Signatures\SignatureNameFolder_files\image001.png"

  7. अपनी फ़ाइल को सहेजें (इसे अधिलेखित करें, आप निश्चित रूप से मूल का बैकअप ले चुके थे)

  8. आउटलुक पर लौटें और नया मेल आइटम खोलें, अपने हस्ताक्षर जोड़ें। मुझे एक चेतावनी मिली कि फाइलें बदल दी गई थी, मैंने ठीक क्लिक किया, मुझे दो बार ऐसा करने की ज़रूरत थी, फिर "सिग्नेचर मेनू को संपादित करें" में एक बार।

    Some of the files in this webpage aren't in the expected location. Do you want to download them anyway? If you're sure the Web page is from a trusted source, click Yes."

  9. अपनी मैक्रो इवेंट को चलाएं, चित्र अब दिखाना चाहिए।

श्रेय
मिनेएक्सेल – वीबीए कोड हस्ताक्षर कोड विफलता: http://bit.ly/1gap9jY

अधिकांश अन्य उत्तर केवल HTML हस्ताक्षर के साथ अपने HTML बॉडी को जोड़ते हैं। हालांकि, यह छवियों के साथ काम नहीं करता, और यह पता चला है कि ऐसा करने का एक और "मानक" तरीका है 1

माइक्रोसॉफ्ट आउटलुक पूर्व-2007, जो कि WordEditor के संपादक और माइक्रोसॉफ्ट आउटलुक 2007 के साथ कॉन्फ़िगर किया गया है, ईमेल संपादित करने के लिए वर्ड एडिटर के कुछ कट-डाउन संस्करण का उपयोग करते हैं। इसका अर्थ है कि हम ईमेल में परिवर्तन करने के लिए माइक्रोसॉफ्ट वर्ड डॉक्यूमेंट ऑब्जेक्ट मॉडल का उपयोग कर सकते हैं।

 Set objMsg = Application.CreateItem(olMailItem) objMsg.GetInspector.Display 'Displaying an empty email will populate the default signature Set objSigDoc = objMsg.GetInspector.WordEditor Set objSel = objSigDoc.Windows(1).Selection With objSel .Collapse wdCollapseStart .MoveEnd WdUnits.wdStory, 1 .Copy 'This will copy the signature End With objMsg.HTMLBody = "<p>OUR HTML STUFF HERE</p>" With objSel .Move WdUnits.wdStory, 1 'Move to the end of our new message .PasteAndFormat wdFormatOriginalFormatting 'Paste the copied signature End With 'I am not a VB programmer, wrote this originally in another language so if it does not 'compile it is because this is my first VB method :P 

माइक्रोसॉफ्ट आउटलुक 2007 प्रोग्रामिंग (एस। मोशर)> अध्याय 17, मद निकाय के साथ काम करना: आउटलुक हस्ताक्षर के साथ काम करना

मुझे मोजज़ी के उत्तर की तरह लगता है लेकिन मैंने पाया कि इसने डिफ़ॉल्ट फोंट नहीं बनाए, जो उपयोगकर्ता विशिष्ट हैं। सभी पाठ सामान्य फ़ॉन्ट के रूप में सिस्टम फ़ॉन्ट में दिखाई दिए। नीचे दिए गए कोड उपयोगकर्ता के पसंदीदा फोंट को बरकरार रखे हुए हैं, जबकि इसे केवल थोड़ी देर तक बनाते हैं। यह मोजज़ी के दृष्टिकोण पर आधारित है, डिफ़ॉल्ट शरीर पाठ को बदलने के लिए एक नियमित अभिव्यक्ति का उपयोग करता है और उपयोगकर्ता के चुने हुए बॉडी टेक्स्ट को स्थान देता है जहां यह GetInspector.WordEditor का उपयोग करता है। मैंने पाया कि GetInspector को कॉल के रूप में डीएमआईटी को पॉप्युलेट नहीं किया गया था क्योंकि स्ट्रीलेचेंको इस धागे में ऊपर बताता है, कम से कम, कार्यालय 2010 में नहीं, इसलिए वस्तु अभी भी मेरे कोड में प्रदर्शित होती है। पारित करने में, कृपया ध्यान दें कि MailItem एक ऑब्जेक्ट के रूप में बनाया गया है, एक सरल MailItem के रूप में नहीं है – और यहां देखें। (ओह, और विभिन्न स्वादों के लिए खेद है, लेकिन मैं लंबे समय से वर्णनात्मक चर नामों को पसंद करता हूं ताकि मुझे दिनचर्या मिल सकें!)

 Public Function GetSignedMailItemAsObject(ByVal ToAddress As String, _ ByVal Subject As String, _ ByVal Body As String, _ SignatureName As String) As Object '================================================================================================================='Creates a new MailItem in HTML format as an Object. 'Body, if provided, replaces all text in the default message. 'A Signature is appended at the end of the message. 'If SignatureName is invalid any existing default signature is left in place. '================================================================================================================= ' REQUIRED REFERENCES ' VBScript regular expressions (5.5) ' Microsoft Scripting Runtime '================================================================================================================= Dim OlM As Object 'Do not define this as Outlook.MailItem. If you do, some things will work and some won't (ie SendUsingAccount) Dim Signature As String Dim Doc As Word.Document Dim Regex As New VBScript_RegExp_55.RegExp '(can also use use Object if VBScript is not Referenced) Set OlM = Application.CreateItem(olMailItem) With OlM .To = ToAddress .Subject = Subject 'SignatureName is the exactname that you gave your signature in the Message>Insert>Signature Dialog Signature = GetSignature(SignatureName) If Signature <> vbNullString Then ' Should really strip the terminal </body tag out of signature by removing all characters from the start of the tag ' but Outlook seems to handle this OK if you don't bother. .Display 'Needed. Without it, there is no existing HTMLbody available to work with. Set Doc = OlM.GetInspector.WordEditor 'Get any existing body with the WordEditor and delete all of it Doc.Range(Doc.Content.Start, Doc.Content.End) = vbNullString 'Delete all existing content - we don't want any default signature 'Preserve all local email formatting by placing any new body text, followed by the Signature, into the empty HTMLbody. With Regex .IgnoreCase = True 'Case insensitive .Global = False 'Regex finds only the first match .MultiLine = True 'In case there are stray EndOfLines (there shouldn't be in HTML but Word exports of HTML can be dire) .Pattern = "(<body.*)(?=<\/body)" 'Look for the whole HTMLbody but do NOT include the terminal </body tag in the value returned OlM.HTMLbody = .Replace(OlM.HTMLbody, "$1" & Signature) End With ' Regex Doc.Range(Doc.Content.Start, Doc.Content.Start) = Body 'Place the required Body before the signature (it will get the default style) .Close olSave 'Close the Displayed MailItem (actually Object) and Save it. If it is left open some later updates may fail. End If ' Signature <> vbNullString End With ' OlM Set GetSignedMailItemAsObject = OlM End Function Private Function GetSignature(sigName As String) As String Dim oTextStream As Scripting.TextStream Dim oSig As Object Dim appDataDir, Signature, sigPath, fileName As String Dim FileSys As Scripting.FileSystemObject 'Requires Microsoft Scripting Runtime to be available appDataDir = Environ("APPDATA") & "\Microsoft\Signatures" sigPath = appDataDir & "\" & sigName & ".htm" Set FileSys = CreateObject("Scripting.FileSystemObject") Set oTextStream = FileSys.OpenTextFile(sigPath) Signature = oTextStream.ReadAll ' fix relative references to images, etc. in Signature ' by making them absolute paths, OL will find the image fileName = Replace(sigName, ".htm", "") & "_files/" Signature = Replace(Signature, fileName, appDataDir & "\" & fileName) GetSignature = Signature End Function 

अक्सर यह प्रश्न रॉन डी ब्रुइन की PublishObject एचटीएमएल फ़ंक्शन के संदर्भ में कहा जाता है, जो PublishObject से एचटीएमएल PublishObjectExcel.Range , एफएसओ के माध्यम से निष्कर्ष निकाला जाता है, और परिणामी स्ट्रीम एचटीएमएल को ईमेल के HTML HTMLBody में सम्मिलित करता है। ऐसा करने से, यह डिफ़ॉल्ट हस्ताक्षर को हटा देता है ( RangeToHTML फ़ंक्शन में एक सहायक फ़ंक्शन GetBoiler जो डिफ़ॉल्ट हस्ताक्षर सम्मिलित करने का प्रयास करता है)।

दुर्भाग्य से, खराब-दस्तावेज Application.CommandBars कॉमांडबर्स विधि आउटलुक के द्वारा उपलब्ध नहीं है:

 wdDoc.Application.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting" 

यह एक रनटाइम 6158 बढ़ाएगा:

यहां छवि विवरण दर्ज करें

लेकिन हम अभी भी Word.Document लाभ उठा सकते हैं जो MailItem.GetInspector विधि के माध्यम से सुलभ है, हम अपने डिफ़ॉल्ट हस्ताक्षर (यदि कोई है) को सुरक्षित रखते हुए, Excel से चयन को कॉपी और पेस्ट करके Outlook ईमेल बॉडी में पेस्ट कर सकते हैं।

 Dim rng as Range Set rng = Range("A1:F10") 'Modify as needed With OutMail .To = "xxxxx@xxxxx.com" .BCC = "" .Subject = "Subject" .Display Dim wdDoc As Object '## Word.Document Dim wdRange As Object '## Word.Range Set wdDoc = OutMail.GetInspector.WordEditor Set wdRange = wdDoc.Range(0, 0) wdRange.InsertAfter vbCrLf & vbCrLf 'Copy the range in-place rng.Copy wdRange.Paste End With 

ध्यान दें कि कुछ मामलों में यह पूरी तरह से स्तंभ की चौड़ाई या कुछ मामलों में पंक्ति ऊँचाइयों को संरक्षित नहीं रख सकता है, और जब यह Excel रेंज में आकार और अन्य ऑब्जेक्ट भी कॉपी करेगा, तो यह कुछ फ़िकर संरेखण के कारण भी हो सकता है, लेकिन साधारण टेबल और एक्सेल श्रेणियों, यह बहुत अच्छा है:

यहां छवि विवरण दर्ज करें