Хочу поделиться с сообществом своим решением задачи по автоматическому созданию событий OutLook из книги Excel. Речь идёт о Встречах и Собраниях.
Встреча: событие OutLook, которое отмечается в личном календаре. Устанавливается исключительно для одного пользователя, без вовлечения в процесс других.
Собрание: событие OutLook, которое отмечается в личном календаре с отправкой запроса адресатам. То есть, в отличие от Встречи - другие люди получают уведомление.
Технические нюансы кода:
1). Строго заполнять столбец А для корректной работы программы. Раскрывающиеся списки в помощь. 2). Выделение события цветом корректно работает только на русскоязычном офисе. В остальных случаях цвет категории будет обозначен текстом. 3). Если в столбце "Напоминание?" стоит "Да" - напоминание устанавливается, в остальных случаях - нет. 4). Если хотите просмотреть создаваемые события без сохранения - замените в конце кода .Send / .Save на .Display 5). [Важно!] Участников события вписывать строго через запятую с пробелом: Участник1, Участник2, Участник3 6). [Важно!] Участники Собрания должны быть записаны строго почтовыми адресами: voronov_rv@mail.ru например. 7). Участники Встречи могут быть записаны любыми именами. В тексте события они будут выведены в конце, никакие действия не предусмотрены.
Если данная программа оказалась для Вас полезна или у Вас есть мысли, идеи, мнение, предложения, вопросы - обязательно пишите, ибо интересно же =) На том и держится мой спортивный интерес.
Option Explicit Option Base 0
Sub Rio_OutLook_Time_Manager()
'Author: Roman "Rioran" Voronov 'Date: the 24-th of November, 2014 'Feedback: voronov_rv@mail.ru
'Программа для переноса из файла Excel в Outlook событий "Собрание" и "Встреча"
Dim olApp AsObject'Для обращений к приложению АутЛук Dim NewX AsObject'Для создания объекта события Dim Others AsString'Для работы со списком людей Dim NewMan AsObject'Для добавления нового участника
Dim They 'Массив приглашенных Dim R AsByte'Обработка события Dim X AsLong'Для перебора строк Dim A AsLong'Для перебора участников Dim H AsLong'Высота Таблицы
H = Cells(Rows.Count, 1).End(xlUp).Row If H < 2ThenExitSub Set olApp = CreateObject("Outlook.Application")
For X = 2To H SelectCase Cells(X, 1).Value Case"": R = 0 Case"Собрание": R = 1 Case"Встреча": R = 2 EndSelect If R > 0Then Set NewX = olApp.CreateItem(1) With NewX
.MeetingStatus = R
They = Split(Cells(X, 4).Value, ", ") SelectCase R Case1 For A = 0ToUBound(They)
Others = "<" & They(A) & ">" Set NewMan = NewX.Recipients.Add(Others)
NewMan.Type = 1 Next A
Others = "" Case2
Others = "Участники встречи:" & vbNewLine & vbNewLine For A = 0ToUBound(They)
Others = Others & They(A) & vbNewLine Next A EndSelect
.Subject = Cells(X, 2).Value
.Location = Cells(X, 3).Value
.Body = Cells(X, 5).Value & vbNewLine & vbNewLine & Others 'Текст
.Categories = Cells(X, 6).Value
.Start = Cells(X, 7).Value + Cells(X, 8).Value
.End = Cells(X, 9).Value + Cells(X, 10).Value If Cells(X, 11).Value = "Да"Then
.ReminderSet = True
.ReminderMinutesBeforeStart = Cells(X, 12).Value Else
.ReminderSet = False EndIf SelectCase R Case1: .Send Case2: .Save EndSelect EndWith EndIf Next X
Set They = Nothing Set NewMan = Nothing Set NewX = Nothing Set olApp = Nothing
EndSub
Всем привет и хорошего настроения!
Хочу поделиться с сообществом своим решением задачи по автоматическому созданию событий OutLook из книги Excel. Речь идёт о Встречах и Собраниях.
Встреча: событие OutLook, которое отмечается в личном календаре. Устанавливается исключительно для одного пользователя, без вовлечения в процесс других.
Собрание: событие OutLook, которое отмечается в личном календаре с отправкой запроса адресатам. То есть, в отличие от Встречи - другие люди получают уведомление.
Технические нюансы кода:
1). Строго заполнять столбец А для корректной работы программы. Раскрывающиеся списки в помощь. 2). Выделение события цветом корректно работает только на русскоязычном офисе. В остальных случаях цвет категории будет обозначен текстом. 3). Если в столбце "Напоминание?" стоит "Да" - напоминание устанавливается, в остальных случаях - нет. 4). Если хотите просмотреть создаваемые события без сохранения - замените в конце кода .Send / .Save на .Display 5). [Важно!] Участников события вписывать строго через запятую с пробелом: Участник1, Участник2, Участник3 6). [Важно!] Участники Собрания должны быть записаны строго почтовыми адресами: voronov_rv@mail.ru например. 7). Участники Встречи могут быть записаны любыми именами. В тексте события они будут выведены в конце, никакие действия не предусмотрены.
Если данная программа оказалась для Вас полезна или у Вас есть мысли, идеи, мнение, предложения, вопросы - обязательно пишите, ибо интересно же =) На том и держится мой спортивный интерес.
Option Explicit Option Base 0
Sub Rio_OutLook_Time_Manager()
'Author: Roman "Rioran" Voronov 'Date: the 24-th of November, 2014 'Feedback: voronov_rv@mail.ru
'Программа для переноса из файла Excel в Outlook событий "Собрание" и "Встреча"
Dim olApp AsObject'Для обращений к приложению АутЛук Dim NewX AsObject'Для создания объекта события Dim Others AsString'Для работы со списком людей Dim NewMan AsObject'Для добавления нового участника
Dim They 'Массив приглашенных Dim R AsByte'Обработка события Dim X AsLong'Для перебора строк Dim A AsLong'Для перебора участников Dim H AsLong'Высота Таблицы
H = Cells(Rows.Count, 1).End(xlUp).Row If H < 2ThenExitSub Set olApp = CreateObject("Outlook.Application")
For X = 2To H SelectCase Cells(X, 1).Value Case"": R = 0 Case"Собрание": R = 1 Case"Встреча": R = 2 EndSelect If R > 0Then Set NewX = olApp.CreateItem(1) With NewX
.MeetingStatus = R
They = Split(Cells(X, 4).Value, ", ") SelectCase R Case1 For A = 0ToUBound(They)
Others = "<" & They(A) & ">" Set NewMan = NewX.Recipients.Add(Others)
NewMan.Type = 1 Next A
Others = "" Case2
Others = "Участники встречи:" & vbNewLine & vbNewLine For A = 0ToUBound(They)
Others = Others & They(A) & vbNewLine Next A EndSelect
.Subject = Cells(X, 2).Value
.Location = Cells(X, 3).Value
.Body = Cells(X, 5).Value & vbNewLine & vbNewLine & Others 'Текст
.Categories = Cells(X, 6).Value
.Start = Cells(X, 7).Value + Cells(X, 8).Value
.End = Cells(X, 9).Value + Cells(X, 10).Value If Cells(X, 11).Value = "Да"Then
.ReminderSet = True
.ReminderMinutesBeforeStart = Cells(X, 12).Value Else
.ReminderSet = False EndIf SelectCase R Case1: .Send Case2: .Save EndSelect EndWith EndIf Next X
Set They = Nothing Set NewMan = Nothing Set NewX = Nothing Set olApp = Nothing
этой ссылке здесь самое место =) Как раз там сейчас идёт обсуждение некоторых важных технических моментов.
Самое место коду ОТСЮДА - в ТОЙ теме, в единой хорошей теме с единым обсуждением. Девушку из предыдущей своей темы про Outlook выгнали в новую тему в "Другие приложения" http://www.excelworld.ru/forum/3-11719-120301-16-1416334621 , решение запостили здесь, обсуждение ведем там - прекрасно, даже на три темы вопрос размазался
этой ссылке здесь самое место =) Как раз там сейчас идёт обсуждение некоторых важных технических моментов.
Самое место коду ОТСЮДА - в ТОЙ теме, в единой хорошей теме с единым обсуждением. Девушку из предыдущей своей темы про Outlook выгнали в новую тему в "Другие приложения" http://www.excelworld.ru/forum/3-11719-120301-16-1416334621 , решение запостили здесь, обсуждение ведем там - прекрасно, даже на три темы вопрос размазался Gustav
Выражаю частичное согласие, Herr Gustav. Люблю в каждой отдельной теме решать отдельный вопрос. Задумка была следующей: создать решение для себя (аве спортивный интерес), выложить его в "Готовые", а под пользователя допиливать уже в отдельной теме. Возможно, моя педантичность переходит некоторые границы. Если мои опасения по поводу перегиба с созданием множества тем подтвердит ещё один форумчанин - планка по различию отдельных тем будет снижена.
Выражаю частичное согласие, Herr Gustav. Люблю в каждой отдельной теме решать отдельный вопрос. Задумка была следующей: создать решение для себя (аве спортивный интерес), выложить его в "Готовые", а под пользователя допиливать уже в отдельной теме. Возможно, моя педантичность переходит некоторые границы. Если мои опасения по поводу перегиба с созданием множества тем подтвердит ещё один форумчанин - планка по различию отдельных тем будет снижена.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Да примерно такая же, только с другим типом элемента. По существу один тот же сценарий (принципиальный): * CreateObject("Outlook... * далее CreateItem нужного типа * далее прописываем свойства Item'а * и заключительное .Save или .Send
Да примерно такая же, только с другим типом элемента. По существу один тот же сценарий (принципиальный): * CreateObject("Outlook... * далее CreateItem нужного типа * далее прописываем свойства Item'а * и заключительное .Save или .SendGustav
Примерно такова процедура по добавлению встречи в ЛЮБОЙ календарь:
Sub addAppointmentToAnyOutlookCalendarFromExcel()
Dim objApp AsObject'Outlook.Application Dim objCalendar AsObject'Outlook.Folder Dim objExplorer AsObject'Outlook.Explorer Dim objModule AsObject'Outlook.CalendarModule Dim objGroup AsObject'Outlook.NavigationGroup Dim objNavFolder AsObject'Outlook.NavigationFolder Dim objAppoint AsObject'Outlook.AppointmentItem
Set objApp = CreateObject("Outlook.Application") Set objCalendar = objApp.Session.GetDefaultFolder(9) '9 = olFolderCalendar Set objExplorer = objCalendar.GetExplorer
Set objModule = objExplorer.NavigationPane.Modules.Item("Календарь") Set objGroup = objModule.NavigationGroups.Item("Мои календари") '.Item("Общие календари") Set objNavFolder = objGroup.NavigationFolders.Item("Calendar") '.Item("отгулы, отпуска")
Set objAppoint = objNavFolder.Folder.Items.Add(1) '1 = olAppointmentItem
With objAppoint
.Start = DateSerial(2014, 11, 25) + TimeValue("23:45:00")
.Duration = 30
.Subject = "subject of appointment"
.Save EndWith
Set objAppoint = Nothing Set objNavFolder = Nothing Set objGroup = Nothing Set objModule = Nothing Set objExplorer = Nothing Set objCalendar = Nothing
objApp.Quit Set objApp = Nothing
EndSub
Примерно такова процедура по добавлению встречи в ЛЮБОЙ календарь:
Sub addAppointmentToAnyOutlookCalendarFromExcel()
Dim objApp AsObject'Outlook.Application Dim objCalendar AsObject'Outlook.Folder Dim objExplorer AsObject'Outlook.Explorer Dim objModule AsObject'Outlook.CalendarModule Dim objGroup AsObject'Outlook.NavigationGroup Dim objNavFolder AsObject'Outlook.NavigationFolder Dim objAppoint AsObject'Outlook.AppointmentItem
Set objApp = CreateObject("Outlook.Application") Set objCalendar = objApp.Session.GetDefaultFolder(9) '9 = olFolderCalendar Set objExplorer = objCalendar.GetExplorer
Set objModule = objExplorer.NavigationPane.Modules.Item("Календарь") Set objGroup = objModule.NavigationGroups.Item("Мои календари") '.Item("Общие календари") Set objNavFolder = objGroup.NavigationFolders.Item("Calendar") '.Item("отгулы, отпуска")
Set objAppoint = objNavFolder.Folder.Items.Add(1) '1 = olAppointmentItem
With objAppoint
.Start = DateSerial(2014, 11, 25) + TimeValue("23:45:00")
.Duration = 30
.Subject = "subject of appointment"
.Save EndWith
Set objAppoint = Nothing Set objNavFolder = Nothing Set objGroup = Nothing Set objModule = Nothing Set objExplorer = Nothing Set objCalendar = Nothing
Уверены, что у Вас существует календарь с маршрутом "Календарь \ Мои календари \ Calendar" ? Если нет такого, то мы близки к разгадке и, возможно, надо просто подправить названия в .Item("...")
Уверены, что у Вас существует календарь с маршрутом "Календарь \ Мои календари \ Calendar" ? Если нет такого, то мы близки к разгадке и, возможно, надо просто подправить названия в .Item("...")
Доброго времени суток. Товарищи помогите пожалуйста с кодом. Макрос который выше под свои нужды переделать не смог. Кое как написал (переписал) код для создания встречи в Outlook данными их Excel но он какой то корявый..... Вот в чем смысл: Как обычно есть таблица Excel (воронка продаж) (во вложении) В нее вносятся клиенты и даты проведения "Встречи" или "Звонка" Так вот если это "Встреча" и в столбце "F" оборот составляет >=250 то в календаре должно появиться: СХ:А:2: Наименование клиента (из столбца "С"), соответственно если оборот от 100-250 то СХ:В:2:Наименование клиента и если оборот <=50 то СХ:С:3:Наименование клиента И если в столбце это "Звонок" то в календаре должно появиться СХ:С:3:Наименование клиента
С горем пополам получилось сделать выгрузку с "Встреча" или "Звонок", а вот с оборотом засада. Помогите пожалуйста. Если приведете код в нормальный вид и что бы он работам быстрее буду очень благодарен
Attribute VB_Name = "Module2" Sub AddToOutlook()
Dim olAppointment As Outlook.AppointmentItem Dim olApp As Excel.Application Dim lngRow AsLong, shtSource Dim outapp As Outlook.Application
Dim x AsDate OnErrorResumeNext Set olApp = GetObject(, "Excel.Application") If Err.Number <> 0Then Set olApp = CreateObject("Excel.Application") EndIf
OnErrorGoTo0 Set shtSource = ThisWorkbook.Sheets("Воронка")
For i = 2To404'Число строк по которое работает цикл выгрузки в календарь
If shtSource.Cells(i, 10) = ""Then'если не будет значения - выгрузка не происходит
EndIf
' проверка значения "Встреча"
If shtSource.Cells(i, 15) = "встреча"Then' Условие по которому работает выгрузка If shtSource.Cells(i, 10) > 0Then' Условие по которому работает выгрузка
x = Cells(i, 10) ' дата
Set outapp = New Outlook.Application Set olAppointment = outapp.CreateItem(1) ' создание события в Outlook "встреча"
With olAppointment
.Subject = "СХ: " + shtSource.Cells(i, 2) 'тема
.Location = shtSource.Cells(i, 14) 'место
.Start = shtSource.Cells(i, 10) + shtSource.Cells(i, 11) 'начало события
.Duration = 60'продолжительность события
.Body = shtSource.Cells(i, 17) 'Тело письма
.Categories = "Встреча с клиентом"' категория в Outllok'е для раскраски
.Save 'сохранить ' .Display 'показать ' .Send 'отправить
EndWith
EndIf EndIf
' проверка значения "Звонок"
If shtSource.Cells(i, 15) = "звонок"Then' Условие по которому работает выгрузка
x = Cells(i, 10) ' дата
Set outapp = New Outlook.Application Set olAppointment = outapp.CreateItem(1)
With olAppointment
.Subject = "ОТ: " + shtSource.Cells(i, 2) 'тема
.Location = shtSource.Cells(i, 14) 'место
.Start = shtSource.Cells(i, 10) + shtSource.Cells(i, 11) 'начало события
.Duration = 30'продолжительность события
.Body = shtSource.Cells(i, 17) 'Тело письма ' .Categories = "Встреча с клиентом" ' категория в Outllok'е для раскраски
.Save 'сохранить ' .Display 'показать ' .Send 'отправить EndWith EndIf Next i EndSub
Доброго времени суток. Товарищи помогите пожалуйста с кодом. Макрос который выше под свои нужды переделать не смог. Кое как написал (переписал) код для создания встречи в Outlook данными их Excel но он какой то корявый..... Вот в чем смысл: Как обычно есть таблица Excel (воронка продаж) (во вложении) В нее вносятся клиенты и даты проведения "Встречи" или "Звонка" Так вот если это "Встреча" и в столбце "F" оборот составляет >=250 то в календаре должно появиться: СХ:А:2: Наименование клиента (из столбца "С"), соответственно если оборот от 100-250 то СХ:В:2:Наименование клиента и если оборот <=50 то СХ:С:3:Наименование клиента И если в столбце это "Звонок" то в календаре должно появиться СХ:С:3:Наименование клиента
С горем пополам получилось сделать выгрузку с "Встреча" или "Звонок", а вот с оборотом засада. Помогите пожалуйста. Если приведете код в нормальный вид и что бы он работам быстрее буду очень благодарен
Attribute VB_Name = "Module2" Sub AddToOutlook()
Dim olAppointment As Outlook.AppointmentItem Dim olApp As Excel.Application Dim lngRow AsLong, shtSource Dim outapp As Outlook.Application
Dim x AsDate OnErrorResumeNext Set olApp = GetObject(, "Excel.Application") If Err.Number <> 0Then Set olApp = CreateObject("Excel.Application") EndIf
OnErrorGoTo0 Set shtSource = ThisWorkbook.Sheets("Воронка")
For i = 2To404'Число строк по которое работает цикл выгрузки в календарь
If shtSource.Cells(i, 10) = ""Then'если не будет значения - выгрузка не происходит
EndIf
' проверка значения "Встреча"
If shtSource.Cells(i, 15) = "встреча"Then' Условие по которому работает выгрузка If shtSource.Cells(i, 10) > 0Then' Условие по которому работает выгрузка
x = Cells(i, 10) ' дата
Set outapp = New Outlook.Application Set olAppointment = outapp.CreateItem(1) ' создание события в Outlook "встреча"
With olAppointment
.Subject = "СХ: " + shtSource.Cells(i, 2) 'тема
.Location = shtSource.Cells(i, 14) 'место
.Start = shtSource.Cells(i, 10) + shtSource.Cells(i, 11) 'начало события
.Duration = 60'продолжительность события
.Body = shtSource.Cells(i, 17) 'Тело письма
.Categories = "Встреча с клиентом"' категория в Outllok'е для раскраски
.Save 'сохранить ' .Display 'показать ' .Send 'отправить
EndWith
EndIf EndIf
' проверка значения "Звонок"
If shtSource.Cells(i, 15) = "звонок"Then' Условие по которому работает выгрузка
x = Cells(i, 10) ' дата
Set outapp = New Outlook.Application Set olAppointment = outapp.CreateItem(1)
With olAppointment
.Subject = "ОТ: " + shtSource.Cells(i, 2) 'тема
.Location = shtSource.Cells(i, 14) 'место
.Start = shtSource.Cells(i, 10) + shtSource.Cells(i, 11) 'начало события
.Duration = 30'продолжительность события
.Body = shtSource.Cells(i, 17) 'Тело письма ' .Categories = "Встреча с клиентом" ' категория в Outllok'е для раскраски
.Save 'сохранить ' .Display 'показать ' .Send 'отправить EndWith EndIf Next i EndSub
Rioran, здравствуйте! Спасибо за код, очень круто. Подскажите, как мне создать такое же собрание таким же кодом, но только с перламутровыми пуговицами со автоматической вставкой встречи Skype Meeting? Для каждой строчки - свой Skype Meeting, чтобы группы разных пользователей были разнесены по своим Skype Meetings. Обычно делаю вручную, как на картинке - нажимаю 1, получаю 2.
Rioran, здравствуйте! Спасибо за код, очень круто. Подскажите, как мне создать такое же собрание таким же кодом, но только с перламутровыми пуговицами со автоматической вставкой встречи Skype Meeting? Для каждой строчки - свой Skype Meeting, чтобы группы разных пользователей были разнесены по своим Skype Meetings. Обычно делаю вручную, как на картинке - нажимаю 1, получаю 2. petrstepanov