Хочу поделиться с сообществом своим решением задачи по автоматическому созданию событий OutLook из книги Excel. Речь идёт о Встречах и Собраниях.
Встреча: событие OutLook, которое отмечается в личном календаре. Устанавливается исключительно для одного пользователя, без вовлечения в процесс других.
Собрание: событие OutLook, которое отмечается в личном календаре с отправкой запроса адресатам. То есть, в отличие от Встречи - другие люди получают уведомление.
Технические нюансы кода:
1). Строго заполнять столбец А для корректной работы программы. Раскрывающиеся списки в помощь. 2). Выделение события цветом корректно работает только на русскоязычном офисе. В остальных случаях цвет категории будет обозначен текстом. 3). Если в столбце "Напоминание?" стоит "Да" - напоминание устанавливается, в остальных случаях - нет. 4). Если хотите просмотреть создаваемые события без сохранения - замените в конце кода .Send / .Save на .Display 5). [Важно!] Участников события вписывать строго через запятую с пробелом: Участник1, Участник2, Участник3 6). [Важно!] Участники Собрания должны быть записаны строго почтовыми адресами: voronov_rv@mail.ru например. 7). Участники Встречи могут быть записаны любыми именами. В тексте события они будут выведены в конце, никакие действия не предусмотрены.
Если данная программа оказалась для Вас полезна или у Вас есть мысли, идеи, мнение, предложения, вопросы - обязательно пишите, ибо интересно же =) На том и держится мой спортивный интерес.
[vba]
Код
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 As Object 'Для обращений к приложению АутЛук Dim NewX As Object 'Для создания объекта события Dim Others As String 'Для работы со списком людей Dim NewMan As Object 'Для добавления нового участника
Dim They 'Массив приглашенных Dim R As Byte 'Обработка события Dim X As Long 'Для перебора строк Dim A As Long 'Для перебора участников Dim H As Long 'Высота Таблицы
H = Cells(Rows.Count, 1).End(xlUp).Row If H < 2 Then Exit Sub Set olApp = CreateObject("Outlook.Application")
For X = 2 To H Select Case Cells(X, 1).Value Case "": R = 0 Case "Собрание": R = 1 Case "Встреча": R = 2 End Select If R > 0 Then Set NewX = olApp.CreateItem(1) With NewX .MeetingStatus = R They = Split(Cells(X, 4).Value, ", ") Select Case R Case 1 For A = 0 To UBound(They) Others = "<" & They(A) & ">" Set NewMan = NewX.Recipients.Add(Others) NewMan.Type = 1 Next A Others = "" Case 2 Others = "Участники встречи:" & vbNewLine & vbNewLine For A = 0 To UBound(They) Others = Others & They(A) & vbNewLine Next A End Select .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 End If Select Case R Case 1: .Send Case 2: .Save End Select End With End If Next X
Set They = Nothing Set NewMan = Nothing Set NewX = Nothing Set olApp = Nothing
End Sub
[/vba]
Всем привет и хорошего настроения!
Хочу поделиться с сообществом своим решением задачи по автоматическому созданию событий OutLook из книги Excel. Речь идёт о Встречах и Собраниях.
Встреча: событие OutLook, которое отмечается в личном календаре. Устанавливается исключительно для одного пользователя, без вовлечения в процесс других.
Собрание: событие OutLook, которое отмечается в личном календаре с отправкой запроса адресатам. То есть, в отличие от Встречи - другие люди получают уведомление.
Технические нюансы кода:
1). Строго заполнять столбец А для корректной работы программы. Раскрывающиеся списки в помощь. 2). Выделение события цветом корректно работает только на русскоязычном офисе. В остальных случаях цвет категории будет обозначен текстом. 3). Если в столбце "Напоминание?" стоит "Да" - напоминание устанавливается, в остальных случаях - нет. 4). Если хотите просмотреть создаваемые события без сохранения - замените в конце кода .Send / .Save на .Display 5). [Важно!] Участников события вписывать строго через запятую с пробелом: Участник1, Участник2, Участник3 6). [Важно!] Участники Собрания должны быть записаны строго почтовыми адресами: voronov_rv@mail.ru например. 7). Участники Встречи могут быть записаны любыми именами. В тексте события они будут выведены в конце, никакие действия не предусмотрены.
Если данная программа оказалась для Вас полезна или у Вас есть мысли, идеи, мнение, предложения, вопросы - обязательно пишите, ибо интересно же =) На том и держится мой спортивный интерес.
[vba]
Код
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 As Object 'Для обращений к приложению АутЛук Dim NewX As Object 'Для создания объекта события Dim Others As String 'Для работы со списком людей Dim NewMan As Object 'Для добавления нового участника
Dim They 'Массив приглашенных Dim R As Byte 'Обработка события Dim X As Long 'Для перебора строк Dim A As Long 'Для перебора участников Dim H As Long 'Высота Таблицы
H = Cells(Rows.Count, 1).End(xlUp).Row If H < 2 Then Exit Sub Set olApp = CreateObject("Outlook.Application")
For X = 2 To H Select Case Cells(X, 1).Value Case "": R = 0 Case "Собрание": R = 1 Case "Встреча": R = 2 End Select If R > 0 Then Set NewX = olApp.CreateItem(1) With NewX .MeetingStatus = R They = Split(Cells(X, 4).Value, ", ") Select Case R Case 1 For A = 0 To UBound(They) Others = "<" & They(A) & ">" Set NewMan = NewX.Recipients.Add(Others) NewMan.Type = 1 Next A Others = "" Case 2 Others = "Участники встречи:" & vbNewLine & vbNewLine For A = 0 To UBound(They) Others = Others & They(A) & vbNewLine Next A End Select .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 End If Select Case R Case 1: .Send Case 2: .Save End Select End With End If 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
Примерно такова процедура по добавлению встречи в ЛЮБОЙ календарь: [vba]
Код
Sub addAppointmentToAnyOutlookCalendarFromExcel()
Dim objApp As Object 'Outlook.Application Dim objCalendar As Object 'Outlook.Folder Dim objExplorer As Object 'Outlook.Explorer Dim objModule As Object 'Outlook.CalendarModule Dim objGroup As Object 'Outlook.NavigationGroup Dim objNavFolder As Object 'Outlook.NavigationFolder Dim objAppoint As Object '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 End With
Set objAppoint = Nothing Set objNavFolder = Nothing Set objGroup = Nothing Set objModule = Nothing Set objExplorer = Nothing Set objCalendar = Nothing
objApp.Quit Set objApp = Nothing
End Sub
[/vba]
Примерно такова процедура по добавлению встречи в ЛЮБОЙ календарь: [vba]
Код
Sub addAppointmentToAnyOutlookCalendarFromExcel()
Dim objApp As Object 'Outlook.Application Dim objCalendar As Object 'Outlook.Folder Dim objExplorer As Object 'Outlook.Explorer Dim objModule As Object 'Outlook.CalendarModule Dim objGroup As Object 'Outlook.NavigationGroup Dim objNavFolder As Object 'Outlook.NavigationFolder Dim objAppoint As Object '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 End With
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:Наименование клиента
С горем пополам получилось сделать выгрузку с "Встреча" или "Звонок", а вот с оборотом засада. Помогите пожалуйста. Если приведете код в нормальный вид и что бы он работам быстрее буду очень благодарен [vba]
Код
Attribute VB_Name = "Module2" Sub AddToOutlook()
Dim olAppointment As Outlook.AppointmentItem Dim olApp As Excel.Application Dim lngRow As Long, shtSource Dim outapp As Outlook.Application
Dim x As Date On Error Resume Next Set olApp = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set olApp = CreateObject("Excel.Application") End If
On Error GoTo 0 Set shtSource = ThisWorkbook.Sheets("Воронка")
For i = 2 To 404 'Число строк по которое работает цикл выгрузки в календарь
If shtSource.Cells(i, 10) = "" Then 'если не будет значения - выгрузка не происходит
End If
' проверка значения "Встреча"
If shtSource.Cells(i, 15) = "встреча" Then ' Условие по которому работает выгрузка If shtSource.Cells(i, 10) > 0 Then ' Условие по которому работает выгрузка
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 'отправить
End With
End If End If
' проверка значения "Звонок"
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 'отправить End With End If Next i End Sub
[/vba]
Доброго времени суток. Товарищи помогите пожалуйста с кодом. Макрос который выше под свои нужды переделать не смог. Кое как написал (переписал) код для создания встречи в Outlook данными их Excel но он какой то корявый..... Вот в чем смысл: Как обычно есть таблица Excel (воронка продаж) (во вложении) В нее вносятся клиенты и даты проведения "Встречи" или "Звонка" Так вот если это "Встреча" и в столбце "F" оборот составляет >=250 то в календаре должно появиться: СХ:А:2: Наименование клиента (из столбца "С"), соответственно если оборот от 100-250 то СХ:В:2:Наименование клиента и если оборот <=50 то СХ:С:3:Наименование клиента И если в столбце это "Звонок" то в календаре должно появиться СХ:С:3:Наименование клиента
С горем пополам получилось сделать выгрузку с "Встреча" или "Звонок", а вот с оборотом засада. Помогите пожалуйста. Если приведете код в нормальный вид и что бы он работам быстрее буду очень благодарен [vba]
Код
Attribute VB_Name = "Module2" Sub AddToOutlook()
Dim olAppointment As Outlook.AppointmentItem Dim olApp As Excel.Application Dim lngRow As Long, shtSource Dim outapp As Outlook.Application
Dim x As Date On Error Resume Next Set olApp = GetObject(, "Excel.Application") If Err.Number <> 0 Then Set olApp = CreateObject("Excel.Application") End If
On Error GoTo 0 Set shtSource = ThisWorkbook.Sheets("Воронка")
For i = 2 To 404 'Число строк по которое работает цикл выгрузки в календарь
If shtSource.Cells(i, 10) = "" Then 'если не будет значения - выгрузка не происходит
End If
' проверка значения "Встреча"
If shtSource.Cells(i, 15) = "встреча" Then ' Условие по которому работает выгрузка If shtSource.Cells(i, 10) > 0 Then ' Условие по которому работает выгрузка
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 'отправить
End With
End If End If
' проверка значения "Звонок"
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 'отправить End With End If Next i End Sub
Rioran, здравствуйте! Спасибо за код, очень круто. Подскажите, как мне создать такое же собрание таким же кодом, но только с перламутровыми пуговицами со автоматической вставкой встречи Skype Meeting? Для каждой строчки - свой Skype Meeting, чтобы группы разных пользователей были разнесены по своим Skype Meetings. Обычно делаю вручную, как на картинке - нажимаю 1, получаю 2.
Rioran, здравствуйте! Спасибо за код, очень круто. Подскажите, как мне создать такое же собрание таким же кодом, но только с перламутровыми пуговицами со автоматической вставкой встречи Skype Meeting? Для каждой строчки - свой Skype Meeting, чтобы группы разных пользователей были разнесены по своим Skype Meetings. Обычно делаю вручную, как на картинке - нажимаю 1, получаю 2. petrstepanov