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

Как вставить таблицу в аутлук

  • автор:

Вставка, изменение и удаление таблиц в Outlook.com

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

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

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

  1. Откройте новое либо создайте ответ на полученное сообщение.
  2. В нижней части области создания выберите

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

«>

Снимок экрана: кнопка

вставить таблицу».

Примечание: Если меню параметров форматирования не отображается в нижней части области создания, выберите

Показать параметры форматирования

«Показать параметры форматирования».

Изменение таблицы

Чтобы вставить или удалить строки или столбцы, объединить или разбить ячейки, добавить стиль или удалить таблицу, сделайте следующее:

Снимок экрана: контекстное меню таблицы

    Щелкните правой кнопкой мыши любую ячейку в таблице.

Есть дополнительные вопросы?

Чтобы получить поддержку в Outlook.com, щелкните здесь или выберите Справка в строке меню, затем введите запрос. Если вам не удастся решить проблему самостоятельно, прокрутите страницу вниз до надписи Все еще нужна помощь? и выберите Да.

Чтобы связаться с нами в Outlook.com, необходимо войти в систему. Если не удается войти, щелкните здесь.

Дополнительные сведения об учетной записи Майкрософт и подписках см. в разделе Справка по учетной записи и выставлению счетов.

Значок приложения

Чтобы получить справку и устранить неполадки с другими продуктами и службами Майкрософт, укажите свою проблему здесь.

Публикуйте вопросы, следите за обсуждениями и делитесь знаниями в сообществе Outlook.com.

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

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

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

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

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

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

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

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

  1. Выделите текст, который вы хотите преобразовать в таблицу.
  2. Чтобы открыть диалоговое окно Преобразование текста в таблицу , нажмите клавиши ALT+N, T, V.
  3. Выполните одно из указанных ниже действий.
    • Если в качестве разделителей используются знаки абзацев, нажмите клавиши ALT+P.
    • Если разделителями являются запятые, нажмите клавиши ALT+M.
    • Если для разделения применяются знаки табуляции, нажмите клавиши ALT+T.
  4. Нажимайте клавишу TAB, пока не услышите фразу «ОК, кнопка», а затем нажмите клавишу ВВОД. Будет создана таблица, а фокус вернется в сообщение с выделенной таблицей.

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

  1. Переместите курсор в таблицу, которую вы хотите преобразовать в текст.
  2. Нажмите клавиши ALT+J, L, чтобы открыть вкладку Макетв области Работа с таблицами.
  3. Нажмите клавишу V, чтобы открыть диалоговое окно Преобразовать таблицу в текст , а затем выполните одно из следующих действий:
    • Если в качестве разделителей вы хотите использовать знаки абзацев, нажмите P.
    • Если вы хотите использовать запятые, нажмите M.
    • Чтобы использовать символы табуляции, нажмите T.
  4. Нажимайте клавишу TAB, пока не услышите фразу «ОК, кнопка», а затем нажмите клавишу ВВОД. Фокус вернется в сообщение с выделенным текстом.

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

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

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

  1. Поместите курсор в то место сообщения, куда вы хотите вставить новую таблицу.
  2. Чтобы открыть диалоговое окно Вставка таблицы , нажмите клавиши ALT+N, T, I.
  3. Выберите нужное количество столбцов.
  4. Нажмите клавишу TAB и введите нужное число строк.
  5. Если вы хотите использовать указанные размеры в будущем, нажмите клавиши ALT+Н, чтобы установить флажок По умолчанию для новых таблиц.
  6. Чтобы закрыть диалоговое окно Вставка таблицы , нажимайте клавишу TAB, пока не услышите сообщение «ОК, кнопка», а затем нажмите клавишу ВВОД. Outlook добавляет таблицу в сообщение, а фокус переместится на первый столбец первой строки.
  7. Чтобы проверка, что таблица содержит строку заголовка, нажмите клавиши ALT+J, T, чтобы открыть вкладку Конструкторв области Работа с таблицами.
  8. Нажимайте клавишу TAB, пока не услышите сообщение «Флажок установлен, строка заголовка». При использовании JAWS и NVDA вы услышите фразу «Поле группы параметров стиля таблицы, флажок строки заголовка, установлен флажок». Если вы услышите сообщение «Снято», нажмите клавишу ПРОБЕЛ, чтобы включить строку заголовка. В противном случае нажмите клавишу ESC, чтобы вернуть фокус в таблицу.
  9. Используйте клавиши со стрелками для перемещения по таблицы и введите в нее данные.

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

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

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

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

  1. Поместите курсор в таблицу, которую вы хотите удалить.
  2. Нажмите клавиши ALT+J, L, чтобы открыть вкладку Макетв области Работа с таблицами.
  3. Чтобы удалить всю таблицу, нажмите клавиши D, T. Таблица удаляется, а фокус возвращается к сообщению.

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

Используйте диалоговое окно Свойства таблицы , чтобы присвоить таблице заголовок и описание, чтобы сделать ее более доступной, или изменить выравнивание таблицы.

  1. Поместите курсор в таблицу, которую вы хотите изменить.
  2. Чтобы открыть диалоговое окно Свойства таблицы , нажмите клавиши ALT+J, L, O.
  3. Чтобы задать выравнивание таблицы относительно основного текста сообщения, выполните одно из следующих действий:
    • Чтобы выровнять таблицу по левому краю текста, нажмите клавиши ALT+L.
    • Чтобы выровнять таблицу по центру, нажмите клавиши ALT+C.
    • Чтобы выровнять таблицу по правому краю текста, нажмите клавиши ALT+H.
  4. Чтобы выбрать способ обтекания таблицы текстом, выполните одно из следующих действий:
    • Чтобы настроить обтекание по сторонам таблицы, нажмите клавиши ALT+A.
    • Чтобы таблица была отделена от текста, нажмите клавиши ALT+N.
  5. Чтобы присвоить таблице заголовок и описание, нажимайте клавиши ALT+T, а затем нажимайте клавишу СТРЕЛКА ВПРАВО, пока не услышите сообщение «Выбрано, элемент вкладки «Замещающий текст». При использовании JAWS вы услышите фразу «Alt text tab», а при использовании NVDA вы услышите фразу «Элемент вкладки «Замещающий текст», выбранный».
  6. Нажмите клавишу TAB и введите заголовок таблицы, а затем нажмите клавишу TAB и введите описание.
  7. Нажимайте клавишу TAB, пока не услышите «ОК, кнопка», а затем нажмите клавишу ВВОД. Фокус вернется в сообщение.

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

  1. При написании сообщения поместите курсор в точку таблицы, куда нужно добавить столбец или строку.
  2. Нажмите клавиши ALT+J, L, чтобы открыть вкладку Макетв области Работа с таблицами.
  3. Выполните одно из указанных ниже действий.
    • Для добавления строки над выделенной ячейкой нажмите A.
    • Чтобы добавить строку под выбранной точкой, нажмите клавиши B, E.
    • Для добавления столбца слева от выделенной ячейки нажмите L.
    • Для добавления столбца справа от выделенной ячейки нажмите R.
  4. Меню закроется, а фокус вернется в таблицу.

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

Используйте Outlook для Mac с помощью клавиатуры и VoiceOver, встроенного в macOS средства чтения с экрана, для создания и редактирования таблицы в сообщениях электронной почты.

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

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

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

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

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

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

Примечание: Для достижения наилучших результатов в тексте должны быть столбцы, разделенные нажатием клавиши TAB, и строки, разделенные нажатием клавиши RETURN.

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

Вы можете указать размеры таблицы, то есть количество столбцов и строк и их высоту и ширину. Outlook для Mac вставляет базовую таблицу типа сетки для использования.

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

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

  1. Фокус должен находиться в таблице, которую нужно удалить.
  2. Нажмите клавишу СТРЕЛКА ВПРАВО, чтобы перейти к последней ячейке таблицы, а затем нажмите клавишу СТРЕЛКА ВПРАВО, чтобы переместить фокус за пределы таблицы.
  3. Нажмите клавиши SHIFT+СТРЕЛКА ВВЕРХ, чтобы выбрать последнюю строку таблицы. Повторяйте это, пока не будут выбраны все строки таблицы, и нажмите клавишу Backspace, чтобы удалить таблицу.

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

Свойства таблицы можно изменять по отдельности. Например, вы можете определить выравнивание текста, высоту строк, ширину столбцов или добавить замещающий текст для средств чтения с экрана.

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

Используйте клавиши СТРЕЛКА ВПРАВО и СТРЕЛКА ВЛЕВО, чтобы найти нужную вкладку, а затем нажмите клавишу ПРОБЕЛ, чтобы открыть эту вкладку.

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

Вы можете быстро увеличить таблицу, добавив строки или столбцы.

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

Чтобы подтвердить выбор, нажмите клавишу ПРОБЕЛ. Новая пустая строка или столбец вставляется в таблицу в выбранном направлении из ячейки, из нее вы начали.

См. также

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

  • Новые возможности Microsoft 365 становятся доступны подписчикам Microsoft 365 по мере выхода, поэтому в вашем приложении эти возможности пока могут отсутствовать. Чтобы узнать о том, как можно быстрее получать новые возможности, станьте участником программы предварительной оценки Office.
  • Дополнительные сведения о средствах чтения с экрана см. в статье О работе средств чтения с экрана в Microsoft 365.
  • В этой статье предполагается, что Область чтения отключена.
  • Рекомендуем использовать Outlook в Интернете в веб-браузере Microsoft Edge. Outlook в Интернете работает в веб-браузере, поэтому в сочетаниях клавиш есть некоторые отличия от классической программы. Например, для перехода в область команд и выхода из нее вместо клавиши F6 используются клавиши CTRL+F6. Кроме того, такие распространенные команды, как F1 (справка) и CTRL+O (открыть), относятся не к Outlook в Интернете, а к интерфейсу браузера.
  • В настоящее время сайт Outlook.office.com обновляется (Outlook в Интернете). Некоторые пользователи уже перешли на новый интерфейс Outlook, в то время, как остальные пользуются старой версией по умолчанию до тех пор, пока не завершится обновление. Дополнительные сведения см. на странице Получение справки по Outlook в Интернете. Поскольку инструкции в этом разделе относятся к новому интерфейсу, мы рекомендуем вам перейти от классической к новой версии Outlook. Чтобы перейти на новую версию Outlook, нажимайте клавиши CTRL+F6, пока не услышите фразу «Команда, попробовать новый Outlook», а затем нажмите клавишу ВВОД. Если вы слышите фразу «Панель команд», а не «Команда, попробовать новый Outlook», значит вы уже используете новую версию Outlook.

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

При вставке таблицы в сообщение можно указать количество столбцов и строк. Outlook в Интернете вставляет базовую таблицу типа сетки для использования.

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

Примечание: Если нажатие клавиши ВВОД не открывает диалоговое окно, нажмите клавишу SR+ПРОБЕЛ, чтобы отключить режим сканирования, и повторите попытку.

См. также

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

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

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

Как вставить таблицу в аутлук

Добрый вечер, форумчане.
Взяла код Дмитрия (The_Prist) для формирования письма Outlook с таблицей из Excel и в этом месте случился затык — не происходит ничего.
Вроде бы и макросе прописала нужный диапазон, и в функции, а таблица не вставляется. Нужна вставка в письмо диапазона A4:B11

*PS и подпись меня подводит, подпись, как ты могла?

Прикрепленные файлы

  • Пример.xlsm (24.61 КБ)

Пользователь
Сообщений: 39 Регистрация: 08.10.2019
14.10.2019 21:29:32

У меня нет исходного макроса, но могу сказать, что вы явно неправильно внесли в него диапазон. Вы указали диапазон в переменную sF — а она чуть выше объявлена как переменная со строковым значением, а не переменная с диапазоном, и позже в коде она используется в качестве названия файла.
Судя по тому, как устроен макрос, в нём не нужно указывать диапазон прямо в коде — вы выделяете нужную таблицу и запускаете макрос.

Пользователь
Сообщений: 53 Регистрация: 09.05.2019
15.10.2019 22:25:27

Не помогло. Если вставить таблицу в файл Дмитрия — работает, а если скопировать его код к себе — нет.

Текст макроса привожу ниже:

Option Explicit Sub Send_Mail() Dim objOutlookApp As Object, objMail As Object Dim sTo As String, sSubject As String, sBody As String, sAttachment As String Application.ScreenUpdating = False On Error Resume Next 'пробуем подключиться к Outlook, если он уже открыт Set objOutlookApp = GetObject(, "Outlook.Application") Err.Clear 'Outlook закрыт, очищаем ошибку If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application") End If objOutlookApp.Session.Logon Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение 'если не получилось создать приложение или экземпляр сообщения - выходим If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub sTo = "AddressTo@mail.ru" 'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value) sSubject = Range("AF4") 'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value) sBody = "Странно, что не отображается " & Range("B9") & "\Microsoft\Signatures\" Dim sTblBody As String sTblBody = ConvertRngToHTM(Selection) 'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value) sAttachment = "C:\Temp\Книга1.xls" 'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4").Value) 'создаем сообщение With objMail .To = sTo 'адрес получателя .CC = "" 'адрес для копии .BCC = "" 'адрес для скрытой копии .Subject = sSubject 'тема сообщения .Body = sBody 'текст сообщения '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.) .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName '.Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра .Display End With Set objOutlookApp = Nothing: Set objMail = Nothing Application.ScreenUpdating = True End Sub 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 'сохраняем книгу как Веб-страницу(чтобы содержимое конвертировать в HTML-код) With wbTmp.PublishObjects.Add( _ SourceType:=xlSourceRange, Filename:=sF, _ Sheet:=wbTmp.Sheets(1).Name, Source:=wbTmp.Sheets(1).UsedRange.Address, _ 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 forum-post-lastedit"> Изменено: Maayun  - 15.10.2019 22:27:12 
Nordheim
Пользователь
Сообщений: 3154 Регистрация: 18.04.2017
#4
16.10.2019 08:43:54
В вышеприведенны код вместо
Код
.Body = sBody 'Текст сообщения
.htmlbody = sBody & sTblBody

Вставить в письмо 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 не будет опубликован. Обязательные поля помечены *