Как из экселя перенести таблицу в письмо
Перейти к содержимому

Как из экселя перенести таблицу в письмо

  • автор:

Добавление таблицы в сообщение

Если вы когда-либо пытались вручную выстраивать строки и столбцы текста с пробелами, вы знаете, насколько это может быть разочарование. Вкладки — это отличное начало, но таблицы добавляют возможность включать привлекательные стили. Воспользуйтесь электронными таблицами Excel, включающими формулы и вычисления.

Пример таблицы в сообщении электронной почты

Команда вставки таблицы на ленте

  1. Щелкните место, где нужно вставить таблицу в сообщение.
  2. На вкладке Вставить нажмите кнопку Таблица.

  • Щелкните сетку таблицы, чтобы задать количество строк и столбцов в новой пустой таблице.
  • Щелкните Вставить таблицу для базового шаблона таблицы.
  • Щелкните Рисовать таблицу , чтобы получить указатель, который позволяет рисовать собственную таблицу, строки и столбцы, а также изменять размеры ячеек таблицы.
  • Щелкните Электронная таблица Excel , чтобы добавить электронную таблицу в сообщение. Это как мини-версия Excel в сообщении, которую можно использовать для добавления формул и выполнения вычислений. Используйте точки дескриптора на нижнем и правом краях, чтобы изменить размер.
  • Наведите указатель мыши на пункт Быстрые таблицы, а затем выберите нужную таблицу. Замените содержимое таблицы собственным.

Вставка таблицы в почте с помощью средства чтения с экрана

Эта статья предназначена для людей с нарушениями зрения или когнитивных функций, использующих программы чтения с экрана, такие как WindowsЭкранный диктор, JAWS или NVDA, с продуктами Microsoft 365. Эта статья входит в набор содержимого поддержки средства чтения с экрана Microsoft 365, где содержатся дополнительные сведения о специальных возможностях в наших приложениях. Чтобы получить справку общего характера, посетите службу поддержки Майкрософт.

Используйте Почта для Windows 10 клавиатуре и средстве чтения с экрана для создания и редактирования таблицы в сообщении электронной почты. Мы проверили эту функцию с использованием экранного диктора, JAWS и NVDA, но она может работать и с другими средствами чтения с экрана, если они соответствуют общепринятым стандартам и методам для специальных возможностей.

  • Новые возможности Microsoft 365 становятся доступны подписчикам Microsoft 365 по мере выхода, поэтому в вашем приложении эти возможности пока могут отсутствовать. Чтобы узнать о том, как можно быстрее получать новые возможности, станьте участником программы предварительной оценки Office.
  • Дополнительные сведения о средствах чтения с экрана см. в статье О работе средств чтения с экрана в Microsoft 365.

В этом разделе

  • Преобразование текста в таблицу
  • Вставка таблицы
  • Удаление таблицы
  • Настройка свойств таблицы
  • Добавление столбцов и строк в таблицу

Преобразование текста в таблицу

Если у вас есть блок текста, использующий согласованные разделители, такие как запятые или позиции табуляции, его легко преобразовать в таблицу.

  1. Выделите в сообщении текст, который вы хотите преобразовать в таблицу.
  2. Нажмите клавишу ALT, чтобы переместить фокус на ленту. Прозвучит фраза «Лента», а затем выбранная вкладка.
  3. Нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите фразу «Вставка, вкладка», а затем один раз нажмите клавишу СТРЕЛКА ВНИЗ, чтобы переместить фокус на ленту «Вставка «.
  4. Нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Таблица, кнопка», а затем нажмите клавишу ВВОД. Будет создана таблица, а фокус вернется в сообщение с выделенной таблицей.

Вставка таблицы

При вставке пустой таблицы в сообщение электронной почты Почта таблицу базового типа сетки с тремя строками и тремя столбцами. Затем вы можете добавить в нее дополнительные строки и столбцы.

Примечание: Чтобы таблицей можно было пользоваться с помощью специальных возможностей, важно ввести строку заголовков. Используйте меню «Параметры стиля», чтобы добавить строку заголовка. Инструкции см. в разделе «Изменение свойств таблицы».

  1. Поместите курсор в то место сообщения, куда вы хотите вставить новую таблицу.
  2. Нажмите клавишу ALT, чтобы переместить фокус на ленту. Прозвучит фраза «Лента», а затем выбранная вкладка.
  3. Нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите фразу «Вставка, вкладка», а затем один раз нажмите клавишу СТРЕЛКА ВНИЗ, чтобы переместить фокус на ленту «Вставка «.
  4. Нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Таблица, кнопка», а затем нажмите клавишу ВВОД. Будет создана таблица, а фокус вернется в сообщение с выделенной таблицей.

Использование встроенных стилей

После создания таблицы можно быстро изменить ее внешний вид с помощью встроенных стилей в Почта.

  1. При написании сообщения поместите курсор в таблицу, которую нужно изменить.
  2. Нажмите клавишу ALT, чтобы переместить фокус на ленту. Прозвучит фраза «Лента», а затем выбранная вкладка. Если фокус не находится на вкладке «Таблица», нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Табличная вкладка».
  3. Один раз нажмите клавишу СТРЕЛКА ВНИЗ, чтобы переместить фокус на ленту таблицы .
  4. Нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Стили таблицы, кнопка», а затем нажмите клавишу ВВОД.
  5. В меню «Стили таблиц» используйте клавиши со стрелками для просмотра доступных стилей таблиц, а затем нажмите клавишу ВВОД. Стиль заголовка применяется к таблице, а фокус возвращается на нее.

Удаление таблицы

  1. Поместите курсор в таблицу, которую вы хотите удалить.
  2. Нажмите клавишу ALT, чтобы переместить фокус на ленту. Прозвучит фраза «Лента», а затем выбранная вкладка. Если фокус не находится на вкладке «Таблица», нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Табличная вкладка».
  3. Один раз нажмите клавишу СТРЕЛКА ВНИЗ, чтобы переместить фокус на ленту таблицы .
  4. Прозвучит сообщение «Удалить, кнопка». Нажмите клавишу ВВОД, чтобы открыть меню « Удалить».
  5. Чтобы удалить всю таблицу, нажимайте клавишу СТРЕЛКА ВНИЗ, пока не услышите сообщение «Удалить таблицу, кнопка», а затем нажмите клавишу ВВОД. Таблица будет удалена, а фокус вернется в сообщение.

Настройка свойств таблицы

Вы можете настроить выравнивание таблицы, добавить ее название и описание, чтобы сделать ее более понятной, а также изменить параметры ее стиля.

  1. Поместите курсор в таблицу.
  2. Нажмите клавишу ALT, чтобы переместить фокус на ленту. Прозвучит фраза «Лента», а затем выбранная вкладка. Если фокус не находится на вкладке «Таблица», нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Табличная вкладка».
  3. Один раз нажмите клавишу СТРЕЛКА ВНИЗ, чтобы переместить фокус на ленту таблицы .
  4. Выполните одно или несколько из следующих действий:
  5. Чтобы настроить выравнивание таблицы, нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите «Выравнивание», и нажмите клавишу ВВОД. Затем перейдите в меню «Выравнивание » с помощью клавиш со стрелками, пока не услышите нужный вариант, и нажмите клавишу ВВОД. Чтобы закрыть меню «Выравнивание «, нажмите клавишу ESC.
  6. Чтобы добавить замещающий заголовок и описание текста, нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите «Замещающий текст», и нажмите клавишу ВВОД. Фокус находится на поле «Заголовок «. Введите заголовок таблицы, нажмите клавишу TAB один раз и введите описание таблицы. Чтобы закрыть диалоговое окно «Замещающий текст «, нажмите клавишу ESC.

Примечание: Если окно почты свернуто, кнопка » Замещающий текст» может быть свернута внутри кнопки «Размер ячейки «. Нажимайте клавишу TAB, пока не услышите сообщение «Размер ячейки, кнопка, свернуто», и нажмите клавишу ВВОД. Нажимайте клавишу СТРЕЛКА ВНИЗ, пока не услышите фразу «Замещающий текст, кнопка», и нажмите клавишу ВВОД.

Добавление столбцов и строк в таблицу

  1. При написании сообщения поместите курсор в любое место таблицы, в которую вы хотите добавить строки или столбцы.
  2. Нажмите клавишу ALT, чтобы переместить фокус на ленту. Прозвучит фраза «Лента», а затем выбранная вкладка. Если фокус не находится на вкладке «Таблица», нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Табличная вкладка».
  3. Один раз нажмите клавишу СТРЕЛКА ВНИЗ, чтобы переместить фокус на ленту таблицы .
  4. Нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите фразу «Вставка, кнопка», и нажмите клавишу ВВОД.
  5. В меню «Вставка » нажимайте клавишу СТРЕЛКА ВНИЗ, пока не услышите нужный вариант, а затем нажмите клавишу ВВОД. Столбец или строка добавляются в таблицу.
  6. Чтобы закрыть меню «Вставка «, нажмите клавишу ESC. Фокус переместится на добавленную строку или столбец в таблице.

Дополнительные сведения

Техническая поддержка пользователей с ограниченными возможностями

Корпорация Майкрософт стремится к тому, чтобы все наши клиенты получали наилучшие продукты и обслуживание. Если у вас ограниченные возможности или вас интересуют вопросы, связанные со специальными возможностями, обратитесь в службу Microsoft Disability Answer Desk для получения технической поддержки. Специалисты Microsoft Disability Answer Desk знакомы со многими популярными специальными возможностями и могут оказывать поддержку на английском, испанском, французском языках, а также на американском жестовом языке. Перейдите на сайт Microsoft Disability Answer Desk, чтобы узнать контактные сведения для вашего региона.

Если вы представитель государственного учреждения или коммерческой организации, обратитесь в службу Disability Answer Desk для предприятий.

Как скопировать таблицу из электронного письма и вставить ее в другое?

Мне не нужно копировать текст. Мне нужно скопировать таблицу в электронном письме. Конкретно — Рамблер. Она не выделяется и не копируется как обычный текст. Потому и прошу о помощи, ведь других способов я не знаю. Читала, что нужно в исходном коде страницы вставить определенный скрипт для копирования. Пыталась — не вышло. Ребята, в чем волшебство? Очень надо!

Голосование за лучший ответ

Как обычно. Нажми левую кнопку мышки, отметь нужное. Затем правую, «копировать». Зайди туда куда надо вставить.
Подойди маркером к месту куда хочешь перенести. Левая кнопка-нажать. Затем правая -копировать. Все.

Выдели ее и скопируй. Если ты это в браузере делаешь, то Opera не подойдет — она не копирует текст с форматированием, открой через Internet Explorer или другой.

Ну если вы хотите вставить ьаблицу в ворд тогда

выделите ее нажмите комбинацию клавиш ctrl+c потом перейдите в ворд и выберите правой кнопкой вставить
Все!!

Вставить в письмо Outlook таблицу Excel с форматированием

Про создание писем в Outlook через Visual Basic for Applications(VBA) Excel я уже писал пару статей, в том числе и о том, как вставить одну из стандартных подписей в письмо — Вставить в письмо подпись из Outlook через VBA(по умолчанию при создании писем из VBA подпись не вставляется, даже если это настроено параметрами почты). Но т.к. отправка происходит из Excel, то часто возникает и другой вопрос — как в письмо вставить не просто текст, а целую таблицу? Да еще со всем форматированием ячеек? Если речь о ручной вставке, то тут все просто: скопировали диапазон, перешли в письмо — вставили. Но если попробовать тоже самое кодом (через копировать-вставить) — ничего не получится(у Outlook просто нет метода Paste или что-то вроде того). Поэтому рассмотрим другие варианты выхода из ситуации и как можно вообще вставить таблицу в тело письма кодом:

  • Вставка методом SendKyes
  • Вставка таблицы с полным форматированием через конвертирование в HTML
  • Имитация таблицы из диапазона ячеек
Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Application.ScreenUpdating = False 'копируем выделенную таблицу Selection.Copy On Error Resume Next Set objOutlookApp = CreateObject("Outlook.Application") objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub On Error GoTo 0 'создаем сообщение With objMail .To = "адрес получателя" .Subject = "Тема: тест вставки таблицы" .BodyFormat = 2 'olFormatHTML - формат HTML .Display 'отображаем сообщение 'передаем управление ОС, чтобы завершились все лишние процессы DoEvents 'посылаем команду нажатия клавиш Ctrl+V для вставки таблицы из буфера обмена Application.SendKeys "^v" End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub

Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Application.ScreenUpdating = False ‘копируем выделенную таблицу Selection.Copy On Error Resume Next Set objOutlookApp = CreateObject(«Outlook.Application») objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) ‘создаем новое сообщение If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub On Error GoTo 0 ‘создаем сообщение With objMail .To = «адрес получателя» .Subject = «Тема: тест вставки таблицы» .BodyFormat = 2 ‘olFormatHTML — формат HTML .Display ‘отображаем сообщение ‘передаем управление ОС, чтобы завершились все лишние процессы DoEvents ‘посылаем команду нажатия клавиш Ctrl+V для вставки таблицы из буфера обмена Application.SendKeys «^v» End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub

Чем мне не нравится этот метод? Как уже писал — он не очень стабилен и может получиться так, что вставите скопированное не туда или вставка вообще не произойдет.
Если же переносить таблицу кодом вроде такого:
.Body = Range(«A1»).Value & Range(«A2»).Value
то это будут только значения ячеек, но не их форматирование и уж никак не таблица.

Вставка таблицы с полным форматированием через конвертирование в HTML
Все дело в том, что таблица в теле письма это отдельный объект формата HTML. И при вставке через копировать-вставить руками Excel и Outlook делают за нас всю грязную работу по перекодировке скопированного в нужный формат HTML. А значит и нам надо каким-то образом конвертировать нужные ячейки в этот формат, да еще учесть всё форматирование. К примеру, есть такая таблица:

Пример таблица для вставки в письмо Outlook

Теперь эту таблицу надо вставить в письмо вместе с остальным текстом, чтобы было что-то вроде:

Письмо с форматированной таблицей

Чтобы конвертировать нужные ячейки в самостоятельную таблицу в формате HTML я использую такую функцию:

Function ConvertRngToHTM(rng As Range) Dim fso As Object, ts As Object Dim sF As String, resHTM As String Dim wbTmp As Workbook sF = Environ("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm" 'переносим указанный диапазон в новую книгу rng.Copy Set wbTmp = Workbooks.Add(1) With wbTmp.Sheets(1) 'вставляем только ширину столбцов, значения и форматы .Cells(1).PasteSpecial xlPasteColumnWidths .Cells(1).PasteSpecial xlPasteValues .Cells(1).PasteSpecial xlPasteFormats .Cells(1).Select Application.CutCopyMode = False 'удаляем все объекты(фигуры, рисунки и пр.) '------------------------------------------ 'если рисунки и объекты нужны - удалить этот блок On Error Resume Next .DrawingObjects.Visible = True .DrawingObjects.Delete On Error GoTo 0 '------------------------------------------ End With 'выставляем русскую кодировку (если кириллицы в тексте нет - можно убрать) wbTmp.WebOptions.Encoding = msoEncodingCyrillic 'сохраняем книгу как Веб-страницу(чтобы содержимое конвертировать в HTML-код) With wbTmp.PublishObjects.Add( _ SourceType:=xlSourceRange, Filename:=sF, _ Sheet:=wbTmp.Sheets(1).Name, Source:=wbTmp.Sheets(1).UsedRange.Address(1, 1, Application.ReferenceStyle), _ HtmlType:=xlHtmlStatic) .Publish (True) End With 'открываем созданный файл как текстовый и считываем содержимое Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(sF).OpenAsTextStream(1, -2) resHTM = ts.ReadAll ts.Close 'выравниваем таблицу по левому краю(если надо оставить по центру - удалить эту строку) ConvertRngToHTM = Replace(resHTM, "align=center x:publishsource=", "align=left x:publishsource=") 'закрываем временную книгу и удаляем wbTmp.Close False Kill sF 'очищаем объектные переменные Set ts = Nothing: Set fso = Nothing Set wbTmp = Nothing End Function

Function ConvertRngToHTM(rng As Range) Dim fso As Object, ts As Object Dim sF As String, resHTM As String Dim wbTmp As Workbook sF = Environ(«temp») & «/» & Format(Now, «dd-mm-yy h-mm-ss») & «.htm» ‘переносим указанный диапазон в новую книгу rng.Copy Set wbTmp = Workbooks.Add(1) With wbTmp.Sheets(1) ‘вставляем только ширину столбцов, значения и форматы .Cells(1).PasteSpecial xlPasteColumnWidths .Cells(1).PasteSpecial xlPasteValues .Cells(1).PasteSpecial xlPasteFormats .Cells(1).Select Application.CutCopyMode = False ‘удаляем все объекты(фигуры, рисунки и пр.) ‘—————————————— ‘если рисунки и объекты нужны — удалить этот блок On Error Resume Next .DrawingObjects.Visible = True .DrawingObjects.Delete On Error GoTo 0 ‘—————————————— End With ‘выставляем русскую кодировку (если кириллицы в тексте нет — можно убрать) wbTmp.WebOptions.Encoding = msoEncodingCyrillic ‘сохраняем книгу как Веб-страницу(чтобы содержимое конвертировать в HTML-код) With wbTmp.PublishObjects.Add( _ SourceType:=xlSourceRange, Filename:=sF, _ Sheet:=wbTmp.Sheets(1).Name, Source:=wbTmp.Sheets(1).UsedRange.Address(1, 1, Application.ReferenceStyle), _ HtmlType:=xlHtmlStatic) .Publish (True) End With ‘открываем созданный файл как текстовый и считываем содержимое Set fso = CreateObject(«Scripting.FileSystemObject») Set ts = fso.GetFile(sF).OpenAsTextStream(1, -2) resHTM = ts.ReadAll ts.Close ‘выравниваем таблицу по левому краю(если надо оставить по центру — удалить эту строку) ConvertRngToHTM = Replace(resHTM, «align=center x:publishsource=», «align=left x:publishsource=») ‘закрываем временную книгу и удаляем wbTmp.Close False Kill sF ‘очищаем объектные переменные Set ts = Nothing: Set fso = Nothing Set wbTmp = Nothing End Function

Все, что остается — это в нужный момент вызвать эту функцию и вставить в нужное место письма.
Например, для конвертации в текст HTML выделенного на листе диапазона необходимо выполнить код:

Dim sTblBody As String sTblBody = ConvertRngToHTM(Selection)

Dim sTblBody As String sTblBody = ConvertRngToHTM(Selection)

Чтобы создать письмо в Outlook и вставить туда эту таблицу можно использовать такой код:

Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Application.ScreenUpdating = False On Error Resume Next Set objOutlookApp = CreateObject("Outlook.Application") objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub On Error GoTo 0 'создаем сообщение With objMail .To = "адрес получателя" .Subject = "Тема: тест вставки таблицы" .BodyFormat = 2 'olFormatHTML - формат HTML .HTMLBody = ConvertRngToHTM(Selection) .Display 'отображаем сообщение End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub

Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Application.ScreenUpdating = False On Error Resume Next Set objOutlookApp = CreateObject(«Outlook.Application») objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) ‘создаем новое сообщение If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub On Error GoTo 0 ‘создаем сообщение With objMail .To = «адрес получателя» .Subject = «Тема: тест вставки таблицы» .BodyFormat = 2 ‘olFormatHTML — формат HTML .HTMLBody = ConvertRngToHTM(Selection) .Display ‘отображаем сообщение End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub

Более подробно про создание и отправку писем из Excel я писал в этой статье: Как отправить письмо из Excel?
По сути основная задача выполнена, теперь вы сможете вкладывать в сообщение таблицу без потери форматирования.
Если задача поставлена так, что необходимо вставить таблицу не на основании выделенного диапазона(Selection), а на основании конкретного диапазона ячеек на листе(скажем диапазона A20:F27 на листе с именем Лист1 ), то это должно выглядеть так:

Dim sTblBody As String sTblBody = ConvertRngToHTM(Worksheets("Лист1").Range("A20:F27"))

Dim sTblBody As String sTblBody = ConvertRngToHTM(Worksheets(«Лист1»).Range(«A20:F27»))

Скачать файл:

В файле-примере, приложенном к статье, более расширенный вариант кода, который оформлен более удобно, там можно задать в ячейках адрес получателя, тему письма и текст письма. Плюс помимо описанного выше добавляет форматирование к письму, проставляет корректные переносы и непосредственно вставляет таблицу в любое место письма.
За форматирование(назначает шрифт Arial, размер 14) отвечает строка:

sBody = ""font-size: 14px; font-family: Arial"">" & sBody & ""

Полагаю, несложно догадаться где изменить размер шрифта и его имя. Так же можно и иное форматирование применять, если Вам знакомы основы работы с HTML.
Корректные для HTML переносы строк текста

'Переносы строк и шрифт sBody = Replace(sBody, Chr(10), "
"
) sBody = Replace(sBody, vbNewLine, "
"
)

‘Переносы строк и шрифт sBody = Replace(sBody, Chr(10), «
«) sBody = Replace(sBody, vbNewLine, «
«)

Про вставку таблицы следует расписать чуть подробнее. В примере в ячейку B13 записан следующий текст:
Уважаемый клиент!
Только для Вас мы подготовили специальное предложение по товарам, которыми Вы интересовались в нашем Интернет-магазине:

Будем рады видеть Вас среди наших постоянных клиентов!
(а для постоянных клиентов у нас действуют еще более выгодные условия)
С уважением, Дмитрий
менеджер по работе с постоянными клиентами

красным специально выделен тег . Именно на место этого тега будет вставлена таблица, созданная из указанного диапазона и результат будет как на рис.2 (см.выше). Эту метку можно вставлять в любое место и именно туда будет помещена таблица.
В коде диапазон вставляемой таблицы указывается в строке:

Set rDataR = .Range("A15:D18") 'Selection - если надо отправить только выделенные диапазона

Set rDataR = .Range(«A15:D18») ‘Selection — если надо отправить только выделенные диапазона

Его можно изменить на любой необходимый.
Что важно помнить: если помимо вставки таблицы Вы планируете форматировать письмо другими тегами HTML, то лучше сначала сделать все форматирование и только в самом конце, самым последним шагом, добавлять таблицу в письмо. Иначе разметка таблицы может «поплыть».

Надеюсь теперь Вам не составит труда сделать свои сообщения более красивыми и аккуратными.

Понимаю, что многие захотят сделать из этого массовую рассылку. Для этого придется совместить код из этой статьи с кодом из статьи Как отправить письмо из Excel?. Там есть пример отправки писем через Outlook списку получателей.

Имитация таблицы из диапазона ячеек
Подумал, что неплохо было бы дополнить статью простенькой функцией, которая не сохраняет никаких файлов, форматированных таблиц и практически не делает лишних движений. Она просто в письмо вкладывает значения всех ячеек указанного диапазона простым текстом, без форматирования(разве что добавил переносы строки и табуляцию, чтобы соблюдался хоть какой-то табличный вид и текст не был одной единой строкой):

'--------------------------------------------------------------------------------------- ' Author : The_Prist(Щербаков Дмитрий) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' http://www.excel-vba.ru ' Purpose: функция объединяет значения указанного диапазона ячеек в строку ' разрывы между столбцами заменяются табуляцией ' разрывы между строками заменяются переносами на строки '--------------------------------------------------------------------------------------- Function RangeToTextTable(rng As Range) Dim lr As Long, lc As Long, arr Dim res As String arr = rng.Value If Not IsArray(arr) Then ReDim arr(1 To 1, 1 To 1) arr(1, 1) = rng.Value End If For lr = 1 To UBound(arr, 1) For lc = 1 To UBound(arr, 2) If lc = 1 Then res = res & arr(lr, lc) Else res = res & vbTab & arr(lr, lc) End If Next res = res & vbNewLine Next RangeToTextTable = res End Function

‘————————————————————————————— ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Профессиональная разработка приложений для MS Office любой сложности ‘ Проведение тренингов по MS Excel ‘ http://www.excel-vba.ru ‘ Purpose: функция объединяет значения указанного диапазона ячеек в строку ‘ разрывы между столбцами заменяются табуляцией ‘ разрывы между строками заменяются переносами на строки ‘————————————————————————————— Function RangeToTextTable(rng As Range) Dim lr As Long, lc As Long, arr Dim res As String arr = rng.Value If Not IsArray(arr) Then ReDim arr(1 To 1, 1 To 1) arr(1, 1) = rng.Value End If For lr = 1 To UBound(arr, 1) For lc = 1 To UBound(arr, 2) If lc = 1 Then res = res & arr(lr, lc) Else res = res & vbTab & arr(lr, lc) End If Next res = res & vbNewLine Next RangeToTextTable = res End Function

Вставляем значения ячеек при помощи этой функции в письмо:

'создаем сообщение With objMail .To = "адрес получателя" .Subject = "Тема: тест вставки таблицы" '.BodyFormat = 2 'уже не надо, т.к. форматирования нет .Body = RangeToTextTable(Selection) .Display 'отображаем сообщение End With

‘создаем сообщение With objMail .To = «адрес получателя» .Subject = «Тема: тест вставки таблицы» ‘.BodyFormat = 2 ‘уже не надо, т.к. форматирования нет .Body = RangeToTextTable(Selection) .Display ‘отображаем сообщение End With

Письмо без форматирования

Здесь следует помнить, что «таблица» после такой вставки будет выглядеть не очень красиво. И речь не о цвете заголовков — при различной длине текста внутри ячеек текст в письме будет сдвигаться:

чтобы этого как-то избежать, можно чуть модифицировать функцию:

'--------------------------------------------------------------------------------------- ' Author : The_Prist(Щербаков Дмитрий) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' http://www.excel-vba.ru ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' Purpose: функция объединяет значения указанного диапазона ячеек в строку ' разрывы между столбцами заменяются табуляцией ' разрывы между строками заменяются переносами на строки '--------------------------------------------------------------------------------------- Function RangeToTextTable(rng As Range) Dim lr As Long, lc As Long, arr Dim res As String, rh() Dim lSpaces As Long, s As String arr = rng.Value If Not IsArray(arr) Then ReDim arr(1 To 1, 1 To 1) arr(1, 1) = rng.Value End If ReDim rh(1 To UBound(arr, 2)) For lr = 1 To UBound(arr, 1) For lc = 1 To UBound(arr, 2) If Len(arr(lr, lc)) > rh(lc) Then rh(lc) = Len(arr(lr, lc)) End If Next Next For lr = 1 To UBound(arr, 1) For lc = 1 To UBound(arr, 2) s = arr(lr, lc) lSpaces = rh(lc) - Len(s) If lSpaces > 0 Then s = s & Space(lSpaces) End If If lc = 1 Then res = res & s Else res = res & vbTab & s End If Next res = res & vbNewLine Next RangeToTextTable = res End Function

‘————————————————————————————— ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Профессиональная разработка приложений для MS Office любой сложности ‘ Проведение тренингов по MS Excel ‘ http://www.excel-vba.ru ‘ WebMoney — R298726502453; Яндекс.Деньги — 41001332272872 ‘ Purpose: функция объединяет значения указанного диапазона ячеек в строку ‘ разрывы между столбцами заменяются табуляцией ‘ разрывы между строками заменяются переносами на строки ‘————————————————————————————— Function RangeToTextTable(rng As Range) Dim lr As Long, lc As Long, arr Dim res As String, rh() Dim lSpaces As Long, s As String arr = rng.Value If Not IsArray(arr) Then ReDim arr(1 To 1, 1 To 1) arr(1, 1) = rng.Value End If ReDim rh(1 To UBound(arr, 2)) For lr = 1 To UBound(arr, 1) For lc = 1 To UBound(arr, 2) If Len(arr(lr, lc)) > rh(lc) Then rh(lc) = Len(arr(lr, lc)) End If Next Next For lr = 1 To UBound(arr, 1) For lc = 1 To UBound(arr, 2) s = arr(lr, lc) lSpaces = rh(lc) — Len(s) If lSpaces > 0 Then s = s & Space(lSpaces) End If If lc = 1 Then res = res & s Else res = res & vbTab & s End If Next res = res & vbNewLine Next RangeToTextTable = res End Function

Таблица в письме без форматирования моноширным шрифтом

и назначить шрифт для писем по умолчанию Courier New или любой другой мноноширный шрифт. Тогда можно получить примерно такой результат:

Если использовать не моноширный шрифт, то визуально таблица все равно будет неравной и смысла в модификации функции нет.

Статья помогла? Поделись ссылкой с друзьями!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *