Vba outlook сохранить письмо как mht
Argument ‘Topic id’ is null or empty
Сейчас на форуме
© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru
Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.
| ООО «Планета Эксел» ИНН 7735603520 ОГРН 1147746834949 |
ИП Павлов Николай Владимирович ИНН 633015842586 ОГРНИП 310633031600071 |
Метод MailItem.Save (Outlook)
Сохраняет элемент Microsoft Outlook в текущей папке или, если это новый элемент, в папку Outlook по умолчанию для типа элемента.
Синтаксис
expression. Сохранить
Выражение Переменная, представляющая объект MailItem .
Замечания
Если почтовый элемент является встроенным ответом, вызов Сохранить на этом почтовом элементе может завершиться ошибкой и привести к непредвиденному поведению.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Обратная связь
Были ли сведения на этой странице полезными?
Обратная связь
Отправить и просмотреть отзыв по
Макрос сохранения писем в формате HTML
Нужна помощь в написание макроса. Что бы он сохранял письма от определённого адресата в формате HTML т.е если письмо пришло с картинкой макрос должен сохранить её в месте с картинкой, и что бы была возможность просмотреть письмо в браузере. Пытался сам сделать но опыта не хватает мой код ниже прошу помочь
Sub SaveAsTXT() Dim myItem As Outlook.Inspector Dim objItem As Object Set myItem = Application.ActiveInspector If Not TypeName(myItem) = "Nothing" Then Set objItem = myItem.CurrentItem strname = objItem.Subject 'Prompt the user for confirmation Dim strPrompt As String strPrompt = "Are you sure you want to save the item? " & _ "If a file with the same name already exists, " & _ "it will be overwritten with this copy of the file." If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbYes Then objItem.SaveAs Environ("HOMEPATH") & "\My Documents\" & strname & ".html", olTXT End If Else MsgBox "There is no current active inspector." End If End Sub
Отслеживать
задан 13 окт 2015 в 11:06
784 4 4 серебряных знака 22 22 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Один из вариантов реализации задачи следующий:
- Анализ адресатов письма которых требуется сохранять в формате HTML производим с помощью встроенного механизма правил MS Outlook;
- Сохранение писем в формате HTML производим с помощью макроса.
1.Создаем код макроса, который сохраняет письма в формате HTML. Подробности в комментариях:
Option Explicit ' ограничения макроса ' файлы /папки не проверяются на наличие ' для корректной работы файлы / папки не должны быть созданы на диске Sub MailSaveToHTML(myItem As Outlook.MailItem) Dim sName As String ' имя папки, имя файла = теме письма Dim sSaveFolder As String ' папка для сохранения письма в формате HTML Dim sFilesFolder As String ' если письмо содержит присоединенные файлы, то сохраняем в папке, которая создаеся по умолчанию в виде Dim oAttchmnt As Outlook.Attachment sName = myItem.Subject sName = sReplacedSymbols(sName, "_") ' функция заменяет недопустимые символы в именах файлов/папок sSaveFolder = CStr(Environ("USERPROFILE")) + "\Documents\" sFilesFolder = sSaveFolder + sName + ".files" ' обрабатываем только почтовые сообщения If TypeName(myItem) = "MailItem" Then ' если картинка внедрена в письмо, то будет сохранена в папку sFilesFolder для отображения в файле HTML myItem.SaveAs sSaveFolder + sName + ".htm", olHTML ' записываем все присоединенные файлы в папку sFilesFolder ' если картинка внедрена в письмо, то перовначально будет сохранена с именем image001.jpg (и. т. 002, 003 если несколько) ' и повторно как вложение For Each oAttchmnt In myItem.Attachments oAttchmnt.SaveAsFile sFilesFolder + "\" + oAttchmnt.FileName 'MsgBox (oAttchmnt.FileName) Next Else 'все прочие сообщения (задачи, встречи и т.п. не обрабатываются) MsgBox ("Сообщение не является почтовым") End If End Sub ' код функции замены символов недопустимых в именях файлов/папок взят с ' http://www.mrexcel.com/forum/general-excel-discussion-other-questions/714054-macro-save-selected-outlook-2010-email-folder-msg-file.html Function sReplacedSymbols(sStr As String, sSmbl As String) As String sReplacedSymbols = sStr sReplacedSymbols = Replace(sReplacedSymbols, "/", sSmbl) sReplacedSymbols = Replace(sReplacedSymbols, "\", sSmbl) sReplacedSymbols = Replace(sReplacedSymbols, ":", sSmbl) sReplacedSymbols = Replace(sReplacedSymbols, "?", sSmbl) sReplacedSymbols = Replace(sReplacedSymbols, Chr(34), sSmbl) sReplacedSymbols = Replace(sReplacedSymbols, "", sSmbl) sReplacedSymbols = Replace(sReplacedSymbols, "|", sSmbl) End Function
2.Создаем правило, которое запускает макрос по определенным условиям (в нашем случае от определенных адресатов):


2.3.Мастер правил-Запустить скрипт. Выбираем из списка скрипт MailSaveToHTML.

2.4.Мастер правил-Завершение настройки правил

2.5.Правила и оповещения

- Варианты использования:
3.1.Активировать правило. В момент получения писем от адресатов, указанных в Правиле, будет выполняться макрос. При тестировании получения писем с почтового ящика yandex.ru с вложенными файлами даже при незначительных их объемах не происходит экспорт т.к. макрос отрабатывает быстрее чем файлы загружаются. Как вариант решения — установить задержку выполнения макроса.

3.2.Например, принудительно применить правило для принятых и непрочитанных писем. Макрос отрабатывает корректно.
покупка
Как сохранить электронную почту как файл pdf в Outlook?
Если вы работаете с Microsoft Outlook 2010 и 2007, вы обнаружите, что в Outlook нет встроенной программы для изменения электронной почты в формате pdf. Вам необходимо преобразовать электронное письмо в файл PDF с помощью некоторых связанных надстроек или с помощью кода VBA. С помощью следующей статьи вы легко сохраните электронную почту как файл PDF в Outlook.
Массовое сохранение нескольких электронных писем в виде файла PDF или других форматов файлов с помощью массового сохранения
Сохранить электронную почту как файл PDF в Outlook с кодом VBA
1. Сначала вы должны выбрать электронное письмо, которое хотите сохранить в формате PDF.
2. Нажмите Alt + F11 для запуска Microsoft Visual Basic для приложений окно.
3. Нажмите Вставить > Модули, затем скопируйте и вставьте следующий код VBA в окно модуля.

Код VBA для сохранения электронной почты в виде файла PDF:
Sub SaveAsPDFfile() Dim MyOlNamespace As NameSpace Dim MySelectedItem As MailItem Dim Response As String Dim FSO As Object, TmpFolder As Object Dim tmpFileName As String Dim wrdApp As Object Dim wrdDoc As Object Dim bStarted As Boolean Dim dlgSaveAs As FileDialog Dim fdfs As FileDialogFilters Dim fdf As FileDialogFilter Dim i As Integer Dim WshShell As Object Dim SpecialPath As String Dim msgFileName As String Dim strCurrentFile As String Dim strName As String Dim oRegEx As Object Dim intPos As Long Set MyOlNamespace = Application.GetNamespace("MAPI") Set MySelectedItem = ActiveExplorer.Selection.Item(1) Set FSO = CreateObject("Scripting.FileSystemObject") tmpFileName = FSO.GetSpecialFolder(2) strName = "email_temp.mht" tmpFileName = tmpFileName & "\" & strName MySelectedItem.SaveAs tmpFileName, 10 On Error Resume Next Set wrdApp = GetObject(, "Word.Application") If Err Then Set wrdApp = CreateObject("Word.Application") bStarted = True End If On Error GoTo 0 Set wrdDoc = wrdApp.Documents.Open(FileName:=tmpFileName, Visible:=False, Format:=7) Set dlgSaveAs = wrdApp.FileDialog(msoFileDialogSaveAs) Set fdfs = dlgSaveAs.Filters i = 0 For Each fdf In fdfs i = i + 1 If InStr(1, fdf.Extensions, "pdf", vbTextCompare) > 0 Then Exit For End If Next fdf dlgSaveAs.FilterIndex = i Set WshShell = CreateObject("WScript.Shell") SpecialPath = WshShell.SpecialFolders(16) msgFileName = MySelectedItem.Subject Set oRegEx = CreateObject("vbscript.regexp") oRegEx.Global = True oRegEx.Pattern = "[\/:*?""<>|]" msgFileName = Trim(oRegEx.Replace(msgFileName, "")) dlgSaveAs.InitialFileName = SpecialPath & "\" & msgFileName If dlgSaveAs.Show = -1 Then strCurrentFile = dlgSaveAs.SelectedItems(1) If Right(strCurrentFile, 4) <> ".pdf" Then Response = MsgBox("Sorry, only saving in the pdf-format is supported." & _ vbNewLine & vbNewLine & "Save as pdf instead?", vbInformation + vbOKCancel) If Response = vbCancel Then wrdDoc.Close 0 If bStarted Then wrdApp.Quit Exit Sub ElseIf Response = vbOK Then intPos = InStrRev(strCurrentFile, ".") If intPos > 0 Then strCurrentFile = Left(strCurrentFile, intPos - 1) End If strCurrentFile = strCurrentFile & ".pdf" End If End If wrdApp.ActiveDocument.ExportAsFixedFormat OutputFileName:= _ strCurrentFile, _ ExportFormat:=17, _ OpenAfterExport:=False, _ OptimizeFor:=0, _ Range:=0, _ From:=0, _ To:=0, _ Item:=0, _ IncludeDocProps:=True, _ KeepIRM:=True, _ CreateBookmarks:=0, _ DocStructureTags:=True, _ BitmapMissingFonts:=True, _ UseISO19005_1:=False End If Set dlgSaveAs = Nothing wrdDoc.Close If bStarted Then wrdApp.Quit Set MyOlNamespace = Nothing Set MySelectedItem = Nothing Set wrdDoc = Nothing Set wrdApp = Nothing Set oRegEx = Nothing End Sub
Внимание: Этот код VBA успешно протестирован в Outlook 2007 и 2010.

4. Нажмите запустить код.
5. Будет Сохранение файла диалоговое окно, появляющееся во время выполнения кода. Выберите путь для сохранения файла, назовите его и, наконец, нажмите Save. кнопку.

6. Когда код будет запущен, электронное письмо будет успешно преобразовано в файл pdf.
Массовое сохранение нескольких электронных писем в виде файла PDF или других форматов файлов с помощью массового сохранения
Работы С Нами Kutools for Outlook установлен, вы можете использовать его Bulk Save утилита для быстрого сохранения или экспорта выбранных писем в файлы PDF / Excel / CSV или другие форматы файлов.

1. В папке электронной почты выберите сообщения, которые вы хотите сохранить в формате PDF, нажмите Kutools > Bulk Save .

2. в Bulk Save диалоговом окне выберите путь для размещения новых файлов, отметьте PDF format , и вы можете указать Save content как вам нужно.

3. Нажмите Ok. Затем выбранные электронные письма были сохранены в виде файлов PDF по отдельности.