Сайт о телевидении

Сайт о телевидении

» » Vba как повернуть подписи данных. Вставить в письмо подпись из Outlook через VBA. Вывод сообщений о числовых значениях цветов

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


Работа с VB проектом (12)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (63)
Разное (39)
Баги и глюки Excel (3) Вставить в письмо подпись из Outlook через VBA

Последнее время стал часто встречать вопрос о том, как в письмо, созданное кодом VBA в Excel, добавить стандартную подпись Outlook.
Немного теории для тех, кто не знает как создать и использовать подписи в Outlook . Дело в том, что в Outlook можно создавать несколько подписей и какую-то использовать по умолчанию, а остальные можно вставлять в письмо по необходимости.
Чтобы создать подпись в Excel 2007 и выше необходимо перейти в меню:

  • для 2007 : Сервис -Параметры -Сообщение -Подписи
  • для 2010 и выше : Файл (File) -Параметры (Options) -Почта (Mail) -Подписи (Signatures)

В появившемся окне на вкладке Электронная подпись (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 скачиваний)


После скачивания файла прежде чем нажать кнопку Создать письмо в Outlook с подписью надо будет настроить параметры письма в ячейках:
  • в В11 - адрес получателя(кому отправить письмо)
  • в В12 - тема письма
  • в В13 - текст письма


Если планируется отправить письмо с форматированием текста(жирный шрифт, различный цвет шрифта и т.п.) - то надо будет к письму применить теги 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:

  • свойство ChartArea - это свойство возвращает одноименный объект ChartArea, который представляет собой область, занимаемую диаграммой и используется для настройки внешнего вида диаграммы (свойства Font, Interior и т.п.). Если необходимо настроить внешний вид не всей диаграммы, а той ее части, которая используется непосредственно для вывода графика, используется схожее свойство PlotArea . По умолчанию диаграмма размещается прямо по центру листа. Если необходимо ее переместить в точно определенное место листа, используются знакомые на свойства Top, Height, Left и Width для объекта ChartArea.
  • свойство ChartTitle возвращает одноименный объект, при помощи которого можно настроить заголовок диаграммы (с такими свойствами, как Text, Font, Border и т.п.);
  • ChartType - важнейшее свойство, про которое мы уже говорили. Определяет тип диаграммы;
  • HasDataTable - если установить это свойство в True, то в нижней части диаграммы (по умолчанию) появится таблица с числами, на основе которых была создана диаграмма. Одновременно будет создан программный объект DataTable, при помощи которого можно настроить представление этой таблицы. Схожим образом действуют свойства HasLegend, HasPivotFields и HasTitle.
  • Name - это свойство позволяет настроить имя диаграммы (как название вкладки в Excel). По умолчанию диаграммы называются последовательно "Диаграмма1", "Диаграмма2" и т.п.
  • SizeWithWindow - если поставить значение этого свойства в True (по умолчанию False), то размер диаграммы будет подогнан таким образом, чтобы точно соответствовать размеру листа.
  • Tab - свойство, о котором мало кто подозревает. Оно позволяет настроить при помощи одноименного объекта внешний вид вкладки в книге Excel для диаграммы (или просто листа). Например, чтобы пометить вкладку зеленым, можно воспользоваться кодом

oChart.Tab.Color = RGB(0, 255, 0)

  • Visible - возможность спрятать диаграмму без ее удаления.

Остальные свойства в основном относятся к настройке отображения трехмерных диаграмм и к защите диаграммы от изменения пользователем.

Теперь - о самых главных методах объекта Chart:

  • метод Activate() используется очень часто. Он позволяет сделать диаграмму активной (то есть просто перейти на нее);
  • метод ApplyCustomType() позволяет поместить создать диаграмму своего собственно пользовательского типа (для этого необходимо вначале создать шаблон для этого типа и поместить его в галерею);
  • метод ApplyDataLabels() позволяет поместить на диаграмму метки для размещенных на ней данных. Этот метод принимает множество параметров, которые позволяют настроить отображение данных меток (показывать или не показывать значения и т.п.);
  • метод Axes() возвращает объект, представляющий оси диаграммы. Затем этот объект можно использовать для настройки данных осей;
  • ChartWizard() - этот метод позволяет быстро переформатировать диаграмму, как будто бы прошли на графическом экране при помощи мастера построения диаграмм и передали ему значения. Позволяет при помощи одной строки кода добиться того, что другими способами потребовало бы минимум несколько строк;
  • Copy() - позволяет скопировать диаграмму в другое место книги (например, чтобы создать новую диаграмму, использовав в качестве основы существующую). Для переноса существующей диаграммы в другое место можно воспользоваться методами Location() или Move() .
  • CopyPicture() - замечательный метод, который позволяет поместить диаграмму в буфер обмена как изображение. Затем это изображение можно вставить, например, в документ Word или в любое другое место. Другой вариант - воспользоваться методом Export() , который позволяет создать рисунок, представляющий диаграмму, в виде файла на диске.
  • Delete() - просто удаляет диаграмму;
  • Evaluate() - как обычно, этот метод позволяет найти нужную диаграмму в книге по ее имени;
  • PrintOut() - возможность отправить диаграмму на печать. Этот метод принимает множество параметров, которые позволяют настроить такой вывод;
  • Refresh() - возможность обновить диаграмму, если изменились данные, на основе которых она строилась;
  • Select() - возможность выделить диаграмму (равносильно щелчку по ней мышью). Deselect() - снятие выделения (равносильно нажатию на );
  • SetBackgroundPicture() - возможность "подложить" под диаграмму фоновый рисунок. Конечно, он должен быть не очень ярким;
  • SetSourceData() - важнейший метод, который позволяет определить данные, на основе которых строится диаграмма. Про него мы уже говорили.

Для объекта 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_