Последнее время стал часто встречать вопрос о том, как в письмо, созданное кодом VBA в Excel, добавить стандартную подпись Outlook.
Немного теории для тех, кто не знает как создать и использовать подписи в Outlook . Дело в том, что в Outlook можно создавать несколько подписей и какую-то использовать по умолчанию, а остальные можно вставлять в письмо по необходимости.
Чтобы создать подпись в Excel 2007 и выше необходимо перейти в меню:
В появившемся окне на вкладке Электронная подпись (E-mail Signature)
необходимо нажать кнопку Создать (New)
. Будет предложено ввести имя новой подписи. После чего необходимо подтвердить создание нажатием кнопки ОК и подпись будет добавлена. После добавления необходимо выбрать созданную подпись и добавить текст. Все созданные подписи отображаются в поле Выберите подпись для изменения (Select signature to edit)
. При выборе любой подписи в нижнем окне Изменить подпись (Edit signature)
можно изменить как сам текст подписи и другие параметры: добавить/изменить текст, отформатировать его, вставить гиперссылки, картинки(логотип компании, например) и т.д. Для сохранения изменений необходимо нажать кнопку Сохранить(под верхним окном). Не очень интуитивненько, но как есть.
В этой же вкладке можно настроить использование подписей по умолчанию для выбранной учетной записи(для каждой учетной записи можно назначить свою подпись по умолчанию) - в правой части окна.
Чтобы после создания письма вставить любую из созданных ранее подписей необходимо из окна созданного сообщения перейти на вкладку Вставка (Insert)
-Подписи (Signatures)
и выбрать нужную подпись.
Как я уже упоминал вначале статьи - из VBA так же можно создавать письма в Outlook. Подробнее об этом можно прочитать в этой статье: Как отправить письмо из Excel? . И вот там как раз есть небольшой недостаток - при создании письма подпись не добавляется автоматом, даже если она создана и настроена для вставки в новые сообщения. Это и побудило меня написать данную статью. Дело в том, что все созданные подписи хранятся на ПК в определенном месте на диске(%AppData%\Microsoft\Signatures\) и до них можно достучаться. Правда, сэмулировать выбор подписи непосредственно из меню не представляется возможным, а вот определить наличие подписей и сделать их вставку можно. Перебрать все созданные подписи можно кодом:
Sub SeeSigns() Dim sSignPath As String Dim sF sSignPath = Environ("appdata" ) & "\Microsoft\Signatures\" "" sF = Dir(sSignPath & "*.txt" ) Do While sF "" MsgBox sF, vbInformation, "www.сайт" sF = Dir Loop End Sub |
Sub SeeSigns() Dim sSignPath As String Dim sF sSignPath = Environ("appdata") & "\Microsoft\Signatures\" "" sF = Dir(sSignPath & "*.txt") Do While sF "" MsgBox sF, vbInformation, "www.сайт" sF = Dir Loop End Sub
Этот код просматривает только текстовые подписи - т.е. без оформления в виде картинок и гиперссылок. Однако в самой папке помимо текстовых файлов есть файлы с форматированием в формате.htm. Они добавляются в письма, которые пишутся с применением форматирования, т.е. письма формата.HTML.
Создание письма кодом VBA с выбранной подписью
Чтобы сильно не заморачивать всеми премудростями и хитросплетениями кодинга я просто приложу файл, который умеет создавать письма с подписями, при этом можно выбрать нужную подпись и тип: простой текст или форматированный.
Скачать пример
(66,5 KiB, 1 729 скачиваний)
Если планируется отправить письмо с форматированием текста(жирный шрифт, различный цвет шрифта и т.п.) - то надо будет к письму применить теги HTML(ячейка В13
). В файле я составил именно такой текст, чтобы был пример подобных писем. При этом для форматированного письма в форме следует выбрать пункт Форматированный текст (.htm)
. Иначе текст письма будет обычный, но со всеми тегами(ровно так, как он выглядит в самой ячейке на листе). Если форматирование не нужно - то просто записываем текст в ячейку и в форме выбираем Обычный текст (.txt)
.
После нажатия Ок появится запрос:
Если нажать Нет (No)
, то письмо будет создано, подпись добавлена, но письмо не будет отправлено, а просто будет выведено на экран, чтобы можно было проверить правильно ли все заполнено и создано. Если нажать Да (Yes)
, то письмо будет создано и сразу отправлено, без вывода на экран.
Рекомендую сначала пользоваться предпросмотром, чтобы понять как правильно создавать и форматировать письма.
Для тех, кто уже имеет опыт программирования в VBA, полагаю, не составит труда адаптировать код под какие-то свои коды или коды на этом сайте.
Если совсем не охота вдумываться в макросы и нужно готовое решение по рассылке с вложениями и подписями - есть готовое решение: Статья помогла? Поделись ссылкой с друзьями! Видеоуроки
{"Bottom bar":{"textstyle":"static","textpositionstatic":"bottom","textautohide":true,"textpositionmarginstatic":0,"textpositiondynamic":"bottomleft","textpositionmarginleft":24,"textpositionmarginright":24,"textpositionmargintop":24,"textpositionmarginbottom":24,"texteffect":"slide","texteffecteasing":"easeOutCubic","texteffectduration":600,"texteffectslidedirection":"left","texteffectslidedistance":30,"texteffectdelay":500,"texteffectseparate":false,"texteffect1":"slide","texteffectslidedirection1":"right","texteffectslidedistance1":120,"texteffecteasing1":"easeOutCubic","texteffectduration1":600,"texteffectdelay1":1000,"texteffect2":"slide","texteffectslidedirection2":"right","texteffectslidedistance2":120,"texteffecteasing2":"easeOutCubic","texteffectduration2":600,"texteffectdelay2":1500,"textcss":"display:block; padding:12px; text-align:left;","textbgcss":"display:block; position:absolute; top:0px; left:0px; width:100%; height:100%; background-color:#333333; opacity:0.6; filter:alpha(opacity=60);","titlecss":"display:block; position:relative; font:bold 14px \"Lucida Sans Unicode\",\"Lucida Grande\",sans-serif,Arial; color:#fff;","descriptioncss":"display:block; position:relative; font:12px \"Lucida Sans Unicode\",\"Lucida Grande\",sans-serif,Arial; color:#fff; margin-top:8px;","buttoncss":"display:block; position:relative; margin-top:8px;","texteffectresponsive":true,"texteffectresponsivesize":640,"titlecssresponsive":"font-size:12px;","descriptioncssresponsive":"display:none !important;","buttoncssresponsive":"","addgooglefonts":false,"googlefonts":"","textleftrightpercentforstatic":40}}
Объект Excel.Chart, программная работа с диаграммами средствами VBA, выбор типа диаграммы, добавление рядов
Одно из основных применений Excel - это анализ данных. А для анализа данных часто удобно использовать диаграммы с их специальными возможностями, такими, как тренды. На практике задачи по автоматизации создания множества похожих друг на друга диаграмм (обычно на основе информации, полученной из базы данных) возникают очень часто.
С диаграммами в Excel существует некоторая терминологическая путаница. То, что на графическом интерфейсе русского Excel называется диаграммой (меню Вставка -> Диаграмма ), по английски называется графиком (Chart) и ему соответствует объект Chart. В объектной модели Excel предусмотрен также и объект Diagram, но он представляет скорее схему отношений (то, что при помощи графического интерфейса русского Excel можно добавить при помощи меню Вставка -> Схематическая диаграмма ). Под диаграммой в этом разделе будет пониматься то же, что и у создателей русского Excel - график.
Диаграммы в Excel создаются при помощи объекта Chart.
Лучше всего вначале этот объект объявить:
Set oChart = ActiveWorkbook.Charts.Add(, ActiveSheet)
В принципе, диаграмма уже создана, но, поскольку никакие ее свойства не определены, она выглядит просто как пустой лист. Чтобы она обрела содержание, необходимо выполнить еще несколько действий:
Первое (и единственное обязательное действие) - определить источник данных для диаграммы, для чего предназначен метод SetSourceData(). В качестве источника может выступать только объект Range (он передается в качестве первого и единственного обязательного параметра этого метода). Второй параметр (необязательный) определяет, в каком порядке считывать данные - сначала по столбцам или сначала по строкам. Например, в нашем случае это может выглядеть так:
oChart.SetSourceData(Sheets("Лист1").Range("A1:A10"))
В принципе, если запустить созданный код на выполнение, то диаграмма уже будет создана. Для всех остальных параметров будут приняты значения по умолчанию. Однако на практике нужно определить еще хотя бы тип диаграммы (по умолчанию она будет выглядеть как "обычная гистограмма", то есть ряд из столбиков разной длины). Для этой цели используется свойство ChartType, для которой разработчиками предусмотрено целых 73 значения. Например, чтобы преобразовать диаграмму в обычный график, можно использовать код вида:
oChart.ChartType = xlLineMarkers
Еще одна очень распространенная задача – добавить дополнительные ряды на диаграмму. Для этой цели необходимо создать и получить ссылку на объект Series – ряд, а потом для ряда определить свойство Values (ему передается в качестве значения объект Range):
Dim oSeries As Series
Set oSeries = oChart.SeriesCollection.NewSeries
Пользователи часто говорят, что им необходимо создавать диаграммы не на отдельном листе, а на том же листе, на котором расположены данные. По умолчанию диаграмма создается в оперативной памяти и помещается на отдельный лист. Если нам необходимо поместить ее на уже существующий лист, то в этом случае ее вначале надо создать на отдельном листе, а затем переместить при помощи метода Location. Отдельный лист, созданный для диаграммы, при этом автоматически исчезнет:
oChart.Location xlLocationAsObject, "Лист1"
Обратите внимание, что метод Location принимает в качестве первого параметра одну из констант (xlLocationAsNewSheet – переместить на специально создаваемый новый лист, xlLocationAsObject – переместить на объект, то есть лист), а в качестве второго – не объект листа, как можно было бы подумать, а обязательно его имя. Если код предполагается использовать и в русской, и в английской версии Excel, то предпочтительнее получить имя листа программным образом.
Большая неприятность, связанная с методом Location, заключается в том, что после перемещения диаграммы внутрь листа объектная ссылка на эту диаграмму теряется, и надо находить объект этой диаграммы заново. При попытке повторного обращения к объекту Chart выдается сообщение "Automation Error". Лучше всего поэтому вызов метода Location помещать в самый конец кода, посвященного диаграмме. В противном случае нам придется разыскивать созданную нами диаграмму и заново получать на нее объектную ссылку, например так:
Dim oSeries As Series
Set oSeries = Worksheets(1).ChartObjects(1).Chart.SeriesCollection.NewSeries
oSeries.Values = Worksheets(1).Range("B1:B10")
Так работать, конечно, намного менее удобно.
Остальные многочисленные параметры диаграммы настраиваются при помощи свойств и методов объектов Chart:
oChart.Tab.Color = RGB(0, 255, 0)
Остальные свойства в основном относятся к настройке отображения трехмерных диаграмм и к защите диаграммы от изменения пользователем.
Теперь - о самых главных методах объекта Chart:
Для объекта Chart предусмотрено также события "на все случаи жизни" - реакция на щелчки мышью, на выделение/снятие выделения, активизацию, пересчет данных, изменение размера и т.п., однако используются такие события на практике нечасто.
Excel для Office 365 Word для Office 365 Outlook для Office 365 PowerPoint для Office 365 Excel для Office 365 для Mac Word для Office 365 для Mac PowerPoint для Office 365 для Mac Excel 2019 Word 2019 Outlook 2019 PowerPoint 2019 Excel 2016 Excel 2019 для Mac PowerPoint 2019 для Mac Word 2019 для Mac Word 2016 Outlook 2016 PowerPoint 2016 Excel 2013 Word 2013 Outlook 2013 PowerPoint 2013 Excel 2016 для Mac PowerPoint 2016 для Mac Word 2016 для Mac Excel Online Меньше
Подписи данных, содержащие сведения о рядах или отдельных точках данных, упрощают понимание диаграммы. Так, без меток данных на приведенной ниже круговой диаграмме было бы не совсем понятно, что объем продаж кофе составляет 38 % от общего объема продаж. Метки данных можно форматировать, чтобы отобразить специфические элементы, например процентные значения, имена рядов или категорий.
Существует множество параметров форматирования меток данных. Вы можете добавить линии выноски, настроить форму метки, а также изменить ее размер. Все нужные для этого команды содержатся в области задач Формат меток данных . Чтобы перейти в нее, добавьте метки данных , а затем выделите метку, которую требуется отформатировать, и выберите Элементы диаграммы > Метки данных > Дополнительные параметры .
Чтобы перейти в соответствующий раздел, щелкните один из четырех значков, показанных ниже (Заливка и границы , Эффекты , Размер и свойства (Макет и свойства в Outlook или Word) или Параметры подписи ).
Совет: Убедитесь, что выбрана только одна метка данных. Чтобы быстро применить пользовательское форматирование к другим точкам ряда данных, выберите пункты Параметры подписи > Метка рядов данных > Создать копию текущей метки .
Соединение подписей данных с точками данных с помощью линий выноски
Линия выноски - это линия, которая соединяет подпись данных с соответствующей точкой данных и используется при размещении подписи данных за пределами точки данных. Чтобы добавить линию выноски на диаграмму, щелкните подпись и, когда появится четырехсторонняя стрелка, перетащите ее. При перемещении подписи данных линия выноски автоматически перемещается вслед за ней. В более ранних версиях эти функции были доступны только для круговых диаграмм - теперь все типы диаграмм с подписями данных.
Изменение вида линий выноски
Изменение вида подписей данных
Придать новый вид подписям данных можно по-разному, например можно изменить цвет границы подписи, чтобы выделить ее.
Изменение формы подписей данных
Чтобы придать диаграмме нужный вид, можно создать подписи данных практически любой формы.
Изменение размера подписей данных
Щелкните подпись данных и растяните ее границы до необходимого размера.
Совет: Вы можете настроить другие параметры размера (в Excel и PowerPoint) и выравнивания на вкладке Размер и свойства (Макет и свойства в Outlook или Word). Для этого дважды щелкните подпись данных и выберите Размер и свойства .
Кратко напомню.
Пузырьковая диаграмма – это разновидность точечной диаграммы, в которой точки данных заменены пузырьками, причем их размер служит дополнительным (третьим) измерением данных. На пузырьковой диаграмме, как и на точечной, нет оси категорий - и горизонтальная, и вертикальная оси являются осями значений. В дополнение к значениям X и значениям Y, наносимым на точечную диаграмму, на пузырьковой диаграмме показаны также значения Z (размер).
Пузырьковые диаграммы позволяют наглядно представить и анализировать взаимозависимости трех переменных.
В качестве примера построения пузырьковой диаграммы я привел распределение населения России по федеральным округам (рис. 1; см. также Excel-файл). Карта России была найдена в Интернете, сохранена как рисунок и импортирована в качестве фона области построения диаграммы. Координаты (X и Y) каждого «пузыря» были подобраны вручную.
Рис. 1. Распределение населения России по федеральным округам
Скачать заметку в формате , пример в формате zip-архива; политика провайдера не позволяет размещать на сайте файлы, содержащие код VBA; поэтому я заархивировал Excel-файл.
Поскольку доля населения определялась размером пузырей, мне хотелось вывести на диаграмме в качестве подписей названия округов. К сожалению, стандартными средствами Excel это сделать нельзя (рис. 2). Видно, что в качестве подписей Excel предлагает вывести: имя ряда, значение Х, значение Y, размер пузыря или любую комбинацию этих параметров.
Рис. 2. Подписи данных. Стандартные возможности Excel
И вот недавно в книге Гладкий А.А., Чиртик А.А. «Excel 2007. Трюки и эффекты» я встретил макрос , который позволил мне вывести на диаграмму названия округов.
Вот его код
Sub ShowLabels() Dim rgLabels As Range "Диапазон с подписями Dim chrChart As Chart "Диаграмма Dim intPoint As Integer "Точка, для которой добавляется подпись "Определение диаграммы Set chrChart = ActiveSheet.ChartObjects(1).Chart "Запрос на ввод диапазона с исходными данными On Error Resume Next Set rgLabels = Application.InputBox("Укажите диапазон с подписями",_ Type:=8) If rgLabels Is Nothing Then Exit Sub On Error GoTo 0 "Добавление подписей chrChart.SeriesCollection(1).ApplyDataLabels_ Type:=xlDataLabelsShowValue, AutoText:=True, LegendKey:=False "Просмотр диапазона и назначение подписей For intPoint = 1 To chrChart.SeriesCollection(1).Points.Count chrChart.SeriesCollection(1).Points(intPoint).DataLabel.Text_ = rgLabels(intPoint) Next intPoint End Sub Sub DeleteLabels() "Удаление подписей диаграммы ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1).HasDataLabels_ = False End Sub
Sub ShowLabels () Dim rgLabels As Range "Диапазон с подписями Dim chrChart As Chart " Диаграмма Dim intPoint As Integer "Точка, для которой добавляется подпись " Определениедиаграммы Set chrChart = ActiveSheet . ChartObjects (1 ) . Chart "Запрос на ввод диапазона с исходными данными On Error Resume Next Set rgLabels = Application.InputBox("Укажите диапазон с подписями",_ Type:=8) If rgLabels Is Nothing Then Exit Sub On Error GoTo 0 " Добавлениеподписей chrChart . SeriesCollection (1 ) . ApplyDataLabels_ Type : = xlDataLabelsShowValue , AutoText : = True , LegendKey : = False "Просмотр диапазона и назначение подписей For intPoint = 1 To chrChart.SeriesCollection(1).Points.Count chrChart.SeriesCollection(1).Points(intPoint).DataLabel.Text_ |