В связи с массовой потребностью, доработал программу возможностью назначать задачу другим пользователям. Так же учёл полезные технические советы Gustav'a.
Особенности версии 2:
1). Добавлен столбец с получателем задачи. Если ячейка пуста - задача назначится Вам. 2). Получателя можно указывать в форматах: [Имя Фамилия], [<почта>], [Имя Фамилия <почта>], где Имя и Фамилия сработают в рамках компании при корректном написании. 3). При отправке задачи другому человеку ему придёт запрос: принять или отклонить задачу. При любом ответе Вы получите ответное сообщение с указанием выбора пользователя. 4). Если получатель был указан некорректно - будет выведено сообщение об ошибке на экран с указанием получателя. После скрытия окна программа продолжит исполняться.
[vba]
Код
Sub OutTask_Manager()
'Author: Roman "Rioran" Voronov 'Date: the 2-nd of April, 2015 'Feedback: voronov_rv@mail.ru
'Programm: Allows user to create Outlook Tasks. If cell in column C is ' empty, then task will be assigned to current user. In other ' case recipient will be defined according to value.
'Програма: Для создания задач в Outlook, версия 2. Позволяет не только ' создавать задачи "для себя", но и отправлять запросы в виде ' задач другим пользователям.
Dim OutApp As Object 'Для обращений к приложению Outlook Dim OutTsk As Object 'Для создания задачи в Outlook Dim OutMan As Object 'Для работы с получателем задачи Dim shtX As Worksheet 'Для обращения к конкретному листу Dim RecR As String 'Для хранения имени получателя Dim X As Long 'Для перебора создаваемых задач
Set shtX = ThisWorkbook.Worksheets("Задачник") Set OutApp = CreateObject("Outlook.Application") X = 2
Do While shtX.Cells(X, 1).Value <> 0 Set OutTsk = OutApp.CreateItem(3) RecR = shtX.Cells(X, 3).Value If RecR <> "" Then OutTsk.assign Set OutMan = OutTsk.Recipients.Add(RecR) OutMan.Resolve If Not OutMan.resolved Then MsgBox ("Не удаётся назначить задачу пользователю: " & RecR & vbNewLine & "По закрытию этого окна программа продолжит перебор строк.") GoTo NextRow End If End If With OutTsk .Subject = shtX.Cells(X, 1).Value 'Заголовок задачи .Body = shtX.Cells(X, 2).Value 'Текст задачи .ReminderSet = True 'Включить напоминание
Select Case shtX.Cells(X, 4).Value 'Выбираем важность Case "Низкая": .Importance = 0 Case "Обычная": .Importance = 1 Case "Высокая": .Importance = 2 End Select
.StartDate = DateAdd("h", 10, shtX.Cells(X, 5).Value) 'Когда начать задачу .DueDate = DateAdd("h", 10, shtX.Cells(X, 6).Value) 'Дата завершения .ReminderTime = DateAdd("n", shtX.Cells(X, 8).Value * 60 + shtX.Cells(X, 9).Value, shtX.Cells(X, 7).Value) 'Дата напоминания Select Case RecR Case "": .Save Case Else: .Send End Select End With NextRow: X = X + 1 Set OutTsk = Nothing Set OutMan = Nothing Loop Set OutApp = Nothing End Sub
Sub Rio_Cleaner() Dim X As Long With ThisWorkbook.Sheets("Задачник") X = .Cells(.Rows.Count, 1).End(xlUp).Row If X > 1 Then .Range("A2:I" & X).Value = "" Else MsgBox "Чистить нечего" End With End Sub
[/vba]
В связи с массовой потребностью, доработал программу возможностью назначать задачу другим пользователям. Так же учёл полезные технические советы Gustav'a.
Особенности версии 2:
1). Добавлен столбец с получателем задачи. Если ячейка пуста - задача назначится Вам. 2). Получателя можно указывать в форматах: [Имя Фамилия], [<почта>], [Имя Фамилия <почта>], где Имя и Фамилия сработают в рамках компании при корректном написании. 3). При отправке задачи другому человеку ему придёт запрос: принять или отклонить задачу. При любом ответе Вы получите ответное сообщение с указанием выбора пользователя. 4). Если получатель был указан некорректно - будет выведено сообщение об ошибке на экран с указанием получателя. После скрытия окна программа продолжит исполняться.
[vba]
Код
Sub OutTask_Manager()
'Author: Roman "Rioran" Voronov 'Date: the 2-nd of April, 2015 'Feedback: voronov_rv@mail.ru
'Programm: Allows user to create Outlook Tasks. If cell in column C is ' empty, then task will be assigned to current user. In other ' case recipient will be defined according to value.
'Програма: Для создания задач в Outlook, версия 2. Позволяет не только ' создавать задачи "для себя", но и отправлять запросы в виде ' задач другим пользователям.
Dim OutApp As Object 'Для обращений к приложению Outlook Dim OutTsk As Object 'Для создания задачи в Outlook Dim OutMan As Object 'Для работы с получателем задачи Dim shtX As Worksheet 'Для обращения к конкретному листу Dim RecR As String 'Для хранения имени получателя Dim X As Long 'Для перебора создаваемых задач
Set shtX = ThisWorkbook.Worksheets("Задачник") Set OutApp = CreateObject("Outlook.Application") X = 2
Do While shtX.Cells(X, 1).Value <> 0 Set OutTsk = OutApp.CreateItem(3) RecR = shtX.Cells(X, 3).Value If RecR <> "" Then OutTsk.assign Set OutMan = OutTsk.Recipients.Add(RecR) OutMan.Resolve If Not OutMan.resolved Then MsgBox ("Не удаётся назначить задачу пользователю: " & RecR & vbNewLine & "По закрытию этого окна программа продолжит перебор строк.") GoTo NextRow End If End If With OutTsk .Subject = shtX.Cells(X, 1).Value 'Заголовок задачи .Body = shtX.Cells(X, 2).Value 'Текст задачи .ReminderSet = True 'Включить напоминание
Select Case shtX.Cells(X, 4).Value 'Выбираем важность Case "Низкая": .Importance = 0 Case "Обычная": .Importance = 1 Case "Высокая": .Importance = 2 End Select
.StartDate = DateAdd("h", 10, shtX.Cells(X, 5).Value) 'Когда начать задачу .DueDate = DateAdd("h", 10, shtX.Cells(X, 6).Value) 'Дата завершения .ReminderTime = DateAdd("n", shtX.Cells(X, 8).Value * 60 + shtX.Cells(X, 9).Value, shtX.Cells(X, 7).Value) 'Дата напоминания Select Case RecR Case "": .Save Case Else: .Send End Select End With NextRow: X = X + 1 Set OutTsk = Nothing Set OutMan = Nothing Loop Set OutApp = Nothing End Sub
Sub Rio_Cleaner() Dim X As Long With ThisWorkbook.Sheets("Задачник") X = .Cells(.Rows.Count, 1).End(xlUp).Row If X > 1 Then .Range("A2:I" & X).Value = "" Else MsgBox "Чистить нечего" End With End Sub
Здравствуйте! Для начала спасибо вам огромное за созданный инструмент, именно то, что я долго искал. Возможно вы подскажете как предусмотреть возможность добавления больее одного получателя? Пробовал указывать адреса електронной почты через запятую и через точку с запятой, но макрос их не воспринимает в таком формате. Спасибо
Здравствуйте! Для начала спасибо вам огромное за созданный инструмент, именно то, что я долго искал. Возможно вы подскажете как предусмотреть возможность добавления больее одного получателя? Пробовал указывать адреса електронной почты через запятую и через точку с запятой, но макрос их не воспринимает в таком формате. СпасибоCherniavskyi
Выкладываю версию 3, в которой можно в одной ячейке указывать несколько получателей через точку с запятой и пробел. Ограничение - при указании нескольких пользователей себя вписывать нельзя.
[vba]
Код
'Пример заполнения ячейки для нескольких пользователей: someoneСОБАКАmail.ru; elseoneСОБАКАgmail.com; anywhoСОБАКАsample.uk
[/vba] Код программы: [vba]
Код
Option Explicit Option Base 0
Sub OutTask_Manager()
'Author: Roman "Rioran" Voronov 'Date: Version 3, the 16-th of June, 2015 'Feedback: voronov_rv@mail.ru
'Programm: Allows user to create Outlook Tasks. If cell in column C is ' empty, then task will be assigned to current user. In other ' case recipient will be defined according to value. Several ' recepients must be delimited with semicolon and one space.
'Програма: Для создания задач в Outlook, версия 3. Позволяет не только ' создавать задачи "для себя", но и отправлять запросы в виде ' задач другим пользователям. Несколько пользователей должны ' быть разделены точкой с запятой и пробелом.
Dim OutApp As Object 'Для обращений к приложению Outlook Dim OutTsk As Object 'Для создания задачи в Outlook Dim OutMan As Object 'Для работы с получателем задачи Dim shtX As Worksheet 'Для обращения к конкретному листу Dim RecR() As String 'Для хранения имён получателей Dim i As Long 'Для перебора получателей Dim X As Long 'Для перебора создаваемых задач
Set shtX = ThisWorkbook.Worksheets("Задачник") Set OutApp = CreateObject("Outlook.Application") X = 2
Do While shtX.Cells(X, 1).Value <> 0 Set OutTsk = OutApp.CreateItem(3) ReDim RecR(0) RecR = Split(shtX.Cells(X, 3).Value, "; ") 'Если в столбце "Получатель" кто-то указан, то добавляем его. If UBound(RecR) >= 0 Then For i = 0 To UBound(RecR) If RecR(i) <> "" Then OutTsk.assign Set OutMan = OutTsk.Recipients.Add(RecR(i)) OutMan.Resolve If Not OutMan.resolved Then MsgBox ("Не удаётся назначить задачу пользователю: " & RecR(i) & vbNewLine & "По закрытию этого окна программа продолжит перебор получателей и строк.") GoTo NextRow End If End If Next i End If 'Заполняем задачу содержанием. With OutTsk .Subject = shtX.Cells(X, 1).Value 'Заголовок задачи .Body = shtX.Cells(X, 2).Value 'Текст задачи .ReminderSet = True 'Включить напоминание Select Case shtX.Cells(X, 4).Value 'Выбираем важность Case "Низкая": .Importance = 0 Case "Обычная": .Importance = 1 Case "Высокая": .Importance = 2 End Select .StartDate = DateAdd("h", 10, shtX.Cells(X, 5).Value) 'Когда начать задачу .DueDate = DateAdd("h", 10, shtX.Cells(X, 6).Value) 'Дата завершения .ReminderTime = DateAdd("n", shtX.Cells(X, 8).Value * 60 + shtX.Cells(X, 9).Value, shtX.Cells(X, 7).Value) 'Дата напоминания 'В зависимости от содержания в столбце "Получатель" отправляем или сохраняем задачу. Select Case UBound(RecR) Case -1: .Save Case Else: .Send End Select End With NextRow: X = X + 1 Set OutTsk = Nothing Set OutMan = Nothing Loop Set OutApp = Nothing End Sub
Sub Rio_Cleaner() Dim X As Long With ThisWorkbook.Sheets("Задачник") X = .Cells(.Rows.Count, 1).End(xlUp).Row If X > 1 Then .Range("A2:I" & X).Value = "" Else MsgBox "Чистить нечего" End With End Sub
[/vba]
Cherniavskyi, здравствуйте.
Выкладываю версию 3, в которой можно в одной ячейке указывать несколько получателей через точку с запятой и пробел. Ограничение - при указании нескольких пользователей себя вписывать нельзя.
[vba]
Код
'Пример заполнения ячейки для нескольких пользователей: someoneСОБАКАmail.ru; elseoneСОБАКАgmail.com; anywhoСОБАКАsample.uk
[/vba] Код программы: [vba]
Код
Option Explicit Option Base 0
Sub OutTask_Manager()
'Author: Roman "Rioran" Voronov 'Date: Version 3, the 16-th of June, 2015 'Feedback: voronov_rv@mail.ru
'Programm: Allows user to create Outlook Tasks. If cell in column C is ' empty, then task will be assigned to current user. In other ' case recipient will be defined according to value. Several ' recepients must be delimited with semicolon and one space.
'Програма: Для создания задач в Outlook, версия 3. Позволяет не только ' создавать задачи "для себя", но и отправлять запросы в виде ' задач другим пользователям. Несколько пользователей должны ' быть разделены точкой с запятой и пробелом.
Dim OutApp As Object 'Для обращений к приложению Outlook Dim OutTsk As Object 'Для создания задачи в Outlook Dim OutMan As Object 'Для работы с получателем задачи Dim shtX As Worksheet 'Для обращения к конкретному листу Dim RecR() As String 'Для хранения имён получателей Dim i As Long 'Для перебора получателей Dim X As Long 'Для перебора создаваемых задач
Set shtX = ThisWorkbook.Worksheets("Задачник") Set OutApp = CreateObject("Outlook.Application") X = 2
Do While shtX.Cells(X, 1).Value <> 0 Set OutTsk = OutApp.CreateItem(3) ReDim RecR(0) RecR = Split(shtX.Cells(X, 3).Value, "; ") 'Если в столбце "Получатель" кто-то указан, то добавляем его. If UBound(RecR) >= 0 Then For i = 0 To UBound(RecR) If RecR(i) <> "" Then OutTsk.assign Set OutMan = OutTsk.Recipients.Add(RecR(i)) OutMan.Resolve If Not OutMan.resolved Then MsgBox ("Не удаётся назначить задачу пользователю: " & RecR(i) & vbNewLine & "По закрытию этого окна программа продолжит перебор получателей и строк.") GoTo NextRow End If End If Next i End If 'Заполняем задачу содержанием. With OutTsk .Subject = shtX.Cells(X, 1).Value 'Заголовок задачи .Body = shtX.Cells(X, 2).Value 'Текст задачи .ReminderSet = True 'Включить напоминание Select Case shtX.Cells(X, 4).Value 'Выбираем важность Case "Низкая": .Importance = 0 Case "Обычная": .Importance = 1 Case "Высокая": .Importance = 2 End Select .StartDate = DateAdd("h", 10, shtX.Cells(X, 5).Value) 'Когда начать задачу .DueDate = DateAdd("h", 10, shtX.Cells(X, 6).Value) 'Дата завершения .ReminderTime = DateAdd("n", shtX.Cells(X, 8).Value * 60 + shtX.Cells(X, 9).Value, shtX.Cells(X, 7).Value) 'Дата напоминания 'В зависимости от содержания в столбце "Получатель" отправляем или сохраняем задачу. Select Case UBound(RecR) Case -1: .Save Case Else: .Send End Select End With NextRow: X = X + 1 Set OutTsk = Nothing Set OutMan = Nothing Loop Set OutApp = Nothing End Sub
Sub Rio_Cleaner() Dim X As Long With ThisWorkbook.Sheets("Задачник") X = .Cells(.Rows.Count, 1).End(xlUp).Row If X > 1 Then .Range("A2:I" & X).Value = "" Else MsgBox "Чистить нечего" End With End Sub
Всем привет! Нужна помощь, думаю можно в эту тему :)
Во вложении файл с расписанием Намазов, хотелось бы все это выгрузить в Календарь outlook заголовок задачи будет фиксированный на каждый день, а вот время меняется. Нужно что бы все это отображалось в расписание Календаря Outlook подскажите как все это выгрузить из файла? Спасибо! [moder]
Нельзя. Читайте Правила форума, создавайте свю тему в соответствующем разделе форума[/moder]
Всем привет! Нужна помощь, думаю можно в эту тему :)
Во вложении файл с расписанием Намазов, хотелось бы все это выгрузить в Календарь outlook заголовок задачи будет фиксированный на каждый день, а вот время меняется. Нужно что бы все это отображалось в расписание Календаря Outlook подскажите как все это выгрузить из файла? Спасибо! [moder]
Огромное спасибо, только при вставке новой строки и добавлении записи создается очередное событие из первой записи-(
У меня была та же задача. Я решил ее добавлением еще одной колонки со "статусом": новый/старый. И вписал в Loop проверку значения в этом столбце. Если статус "новый" - выполняется цикл и в конце статус меняется на "старый".
Вот код, чтобы понятнее было, о чем я (у меня англ. Эксель, пришлось заменить "важности" и имя листа):
[vba]
Код
Sub OutTask_Manager() 'прошу прощения за кракозябры, я не знаю, как пофиксить кодировку при копировании 'Àâòîìàòè÷åñêîå äîáàâëåíèå çàäà÷ â Outlook 'Ñäåëàë Ðîìàí "Ðèîðàí" Âîðîíîâ (voronov_rv@mail.ru) 'Äëÿ ïîëüçîâàòåëåé ôîðóìà www.excelworld.ru
Dim OutApp As Object 'Äëÿ îáðàùåíèé ê ïðèëîæåíèþ Outlook Dim OutTsk As Object 'Äëÿ ñîçäàíèÿ çàäà÷è â Outlook Dim shtX As Worksheet 'Äëÿ îáðàùåíèÿ ê êîíêðåòíîìó ëèñòó Dim X As Long 'Äëÿ ïåðåáîðà ñîçäàâàåìûõ çàäà÷
Set shtX = ThisWorkbook.Worksheets("test") X = 2
Set OutApp = CreateObject("Outlook.Application") Do While shtX.Cells(X, 1).Value <> 0 If shtX.Cells(X, 9).Value = "new" Then 'условие на проверку статуса
Select Case shtX.Cells(X, 3).Value 'Âûáèðàåì âàæíîñòü Case "Low": .Importance = 0 Case "Normal": .Importance = 1 Case "High": .Importance = 2 End Select
.StartDate = DateAdd("h", 10, shtX.Cells(X, 4).Value) 'Êîãäà íà÷àòü çàäà÷ó .DueDate = DateAdd("h", 10, shtX.Cells(X, 5).Value) 'Äàòà çàâåðøåíèÿ .ReminderTime = DateAdd("n", shtX.Cells(X, 7).Value * 60 + shtX.Cells(X, 8).Value, shtX.Cells(X, 6).Value) 'Äàòà íàïîìèíàíèÿ .Save End With shtX.Cells(X, 9).Value = "old" 'замена статуса в цикле на "старый" End If X = X + 1 Set OutTsk = Nothing Loop
Set OutApp = Nothing
End Sub
[/vba]
В первую очередь, хочу поблагодарить ув. Rioran за полезный инструмент.
Огромное спасибо, только при вставке новой строки и добавлении записи создается очередное событие из первой записи-(
У меня была та же задача. Я решил ее добавлением еще одной колонки со "статусом": новый/старый. И вписал в Loop проверку значения в этом столбце. Если статус "новый" - выполняется цикл и в конце статус меняется на "старый".
Вот код, чтобы понятнее было, о чем я (у меня англ. Эксель, пришлось заменить "важности" и имя листа):
[vba]
Код
Sub OutTask_Manager() 'прошу прощения за кракозябры, я не знаю, как пофиксить кодировку при копировании 'Àâòîìàòè÷åñêîå äîáàâëåíèå çàäà÷ â Outlook 'Ñäåëàë Ðîìàí "Ðèîðàí" Âîðîíîâ (voronov_rv@mail.ru) 'Äëÿ ïîëüçîâàòåëåé ôîðóìà www.excelworld.ru
Dim OutApp As Object 'Äëÿ îáðàùåíèé ê ïðèëîæåíèþ Outlook Dim OutTsk As Object 'Äëÿ ñîçäàíèÿ çàäà÷è â Outlook Dim shtX As Worksheet 'Äëÿ îáðàùåíèÿ ê êîíêðåòíîìó ëèñòó Dim X As Long 'Äëÿ ïåðåáîðà ñîçäàâàåìûõ çàäà÷
Set shtX = ThisWorkbook.Worksheets("test") X = 2
Set OutApp = CreateObject("Outlook.Application") Do While shtX.Cells(X, 1).Value <> 0 If shtX.Cells(X, 9).Value = "new" Then 'условие на проверку статуса
Select Case shtX.Cells(X, 3).Value 'Âûáèðàåì âàæíîñòü Case "Low": .Importance = 0 Case "Normal": .Importance = 1 Case "High": .Importance = 2 End Select
.StartDate = DateAdd("h", 10, shtX.Cells(X, 4).Value) 'Êîãäà íà÷àòü çàäà÷ó .DueDate = DateAdd("h", 10, shtX.Cells(X, 5).Value) 'Äàòà çàâåðøåíèÿ .ReminderTime = DateAdd("n", shtX.Cells(X, 7).Value * 60 + shtX.Cells(X, 8).Value, shtX.Cells(X, 6).Value) 'Äàòà íàïîìèíàíèÿ .Save End With shtX.Cells(X, 9).Value = "old" 'замена статуса в цикле на "старый" End If X = X + 1 Set OutTsk = Nothing Loop
Добрый день. Не пойму из за чего, задача другому человеку в Outlook формируются без напоминаний. При этом создавая задачу себе, напоминание добавляется. При отправке другому пользователю у меня показывается, что задача с напоминанием, а у пользователя после того как принял, задача без напоминания. И в указанный срок ничего не появляется. Есть предположения? Outlook работает с эксчендж сервером
Добрый день. Не пойму из за чего, задача другому человеку в Outlook формируются без напоминаний. При этом создавая задачу себе, напоминание добавляется. При отправке другому пользователю у меня показывается, что задача с напоминанием, а у пользователя после того как принял, задача без напоминания. И в указанный срок ничего не появляется. Есть предположения? Outlook работает с эксчендж серверомalferius
Доброго дня! А можно ли добавить в форму кнопку очистки данных из календаря? Ситуация: 1. Заполнили таблицу и нажали создать события. 2. Через какое то время поняли что в данные вкралась ошибка. 3. Когда внесли в таблицу исправленные данные, то макрос создает их же рядом с предыдущими (не отличить если заранее цветом не указать)
По сути у нас есть таблица с неправильными данными - нужна кнопка которая как создает события так и удаляет по данным таблицы.
Доброго дня! А можно ли добавить в форму кнопку очистки данных из календаря? Ситуация: 1. Заполнили таблицу и нажали создать события. 2. Через какое то время поняли что в данные вкралась ошибка. 3. Когда внесли в таблицу исправленные данные, то макрос создает их же рядом с предыдущими (не отличить если заранее цветом не указать)
По сути у нас есть таблица с неправильными данными - нужна кнопка которая как создает события так и удаляет по данным таблицы.zinnurovra