Specify an Outlook folder for already successful Task creation procedure

F

Finny388

I am using the following to succefully create tasks within Outlook but
only to the default Task folder.
How can I specify to save the task to a particular task folder?

Sub AddTasksToOutlook()
'!! Reference to Outlook object library required !!

Dim olTask As Outlook.TaskItem
Dim olApp As Outlook.Application
Dim lngRow As Long, shtSource As Worksheet

'Get reference to MS Outlook
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set olApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
Set shtSource = ActiveSheet

'Enter number of orders to process in A1
For lngRow = 2 To shtSource.Cells(1, 1).Value + 1
Set olTask = olApp.CreateItem(olTaskItem)
With olTask
.Subject = shtSource.Cells(lngRow, 2) + " " +
shtSource.Cells(1, 3)
.DueDate = CDate(DateValue(shtSource.Cells(lngRow, 3))) ' +
shtSource.Cells(lngRow, 6))
.Categories = "Purchase Orders"
.Save
End With
Next lngRow
End Sub
 
F

Finny388

I am using the following to succefully create tasks within Outlook but
only to the default Task folder.
How can I specify to save the task to a particular task folder?

Sub AddTasksToOutlook()
'!! Reference to Outlook object library required !!

Dim olTask As Outlook.TaskItem
Dim olApp As Outlook.Application
Dim lngRow As Long, shtSource As Worksheet

'Get reference to MS Outlook
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set olApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0
Set shtSource = ActiveSheet

'Enter number of orders to process in A1
For lngRow = 2 To shtSource.Cells(1, 1).Value + 1
Set olTask = olApp.CreateItem(olTaskItem)
With olTask
.Subject = shtSource.Cells(lngRow, 2) + " " +
shtSource.Cells(1, 3)
.DueDate = CDate(DateValue(shtSource.Cells(lngRow, 3))) ' +
shtSource.Cells(lngRow, 6))
.Categories = "Purchase Orders"
.Save
End With
Next lngRow
End Sub

^
 
S

Steve Yandl

Rather than use
Set olTask = olApp.CreateItem(olTaskItem)
you want to get the folder and then
objFolders.Items.Add

Below is an example of a sub that you should be able to modify. This is
adding tasks to a subfolder of my 'Tasks' folder that I've named "Very
Important"

________________________________

Sub LoadTasks()

Const olFolderTasks = 13

Dim r As Integer
Dim x As Integer

r = Range("A65536").End(xlUp).Row

Set ol = CreateObject("Outlook.Application")
Set ns = ol.GetNamespace("MAPI")
Set olFolderDF = ns.GetDefaultFolder(olFolderTasks)
Set olFolder = olFolderDF.Folders("Very Important")

For x = 1 To r
Set taskItem = olFolder.Items.Add
With taskItem
.Subject = Sheets("Sheet1").Cells(x, 1).Value
.DueDate = Sheets("Sheet1").Cells(x, 2).Value
.Save
End With
Next x

Set taskItem = Nothing
Set ns = Nothing
Set ol = Nothing

End Sub

_________________________________

Steve
 
F

Finny388

Rather than use
Set olTask = olApp.CreateItem(olTaskItem)
you want to get the folder and then
objFolders.Items.Add

Below is an example of a sub that you should be able to modify. This is
adding tasks to a subfolder of my 'Tasks' folder that I've named "Very
Important"

________________________________

Sub LoadTasks()

Const olFolderTasks = 13

Dim r As Integer
Dim x As Integer

r = Range("A65536").End(xlUp).Row

Set ol = CreateObject("Outlook.Application")
Set ns = ol.GetNamespace("MAPI")
Set olFolderDF = ns.GetDefaultFolder(olFolderTasks)
Set olFolder = olFolderDF.Folders("Very Important")

For x = 1 To r
Set taskItem = olFolder.Items.Add
With taskItem
.Subject = Sheets("Sheet1").Cells(x, 1).Value
.DueDate = Sheets("Sheet1").Cells(x, 2).Value
.Save
End With
Next x

Set taskItem = Nothing
Set ns = Nothing
Set ol = Nothing

End Sub

_________________________________

Steve

Thanks Steve,
It wouldn't quite work. For some reason it is treating
olFolder in
Set olFolder = olFolderDF.Folders("Order Tracking")
as constant saying:
Assignment to Constant Not Permitted.

Why would it treat this as a constant?
 
F

Finny388

Thanks Steve,
It wouldn't quite work. For some reason it is treating
olFolder in
Set olFolder = olFolderDF.Folders("Order Tracking")
as constant saying:
Assignment to Constant Not Permitted.

Why would it treat this as a constant?

I declared it as a mapifolder and the error went away. Then I declared
the taskitem b/c it had the same error.
No my error is 424 Object Required at - Set NamSp =
ol.GetNamespace("MAPI")

hmm...
 
F

Finny388

I declared it as a mapifolder and the error went away. Then I declared
the taskitem b/c it had the same error.
No my error is 424 Object Required at - Set NamSp =
ol.GetNamespace("MAPI")

hmm...

IT WORKED! IT WORKED! tHANK You Steve!

I just had a naming conflict with the 424 thing.

phew.

One other thing if you happen to know:
How can I check that there isn't already a task with the exact same
subject or subject and category in that folder already so that
duplicates aren't created?

thanks again
 
S

Steve Yandl

Poor choice of object names on my part but the subroutine worked on my
system without error. I just modified an old sub to handle the subfolder
assignment. Try declaring the TaskItem as a varient and see if that works.

Steve
 
S

Steve Yandl

You can do a

For Each itemToCheck In objFolderTarget.Items
If TypeName(itemToCheck) = "TaskItem" Then
' Check itemToCheck.Subject etc. here.
End If
Next itemToCheck


You might look in help for information on the "Scripting.Dictionary" object
which will let you create a special type collection with what gets returned
in the loop above and then rapidly check new additions against the existing
set.
 
F

Finny388

You can do a

For Each itemToCheck In objFolderTarget.Items
If TypeName(itemToCheck) = "TaskItem" Then
' Check itemToCheck.Subject etc. here.
End If
Next itemToCheck

You might look in help for information on the "Scripting.Dictionary" object
which will let you create a special type collection with what gets returned
in the loop above and then rapidly check new additions against the existing
set.

Steve, you've just made my goal of tracking mini tasks without pulling
my hair out an absolute breeze.
Since MS refuses to create composite or hierarchical tasks available,
this allows such management.
Thank you so much. It works like a charm.

btw, I couldn't find Scripting.Dictionary in the help. is it part of
Outlook, Excel, or Office? I'll check MSDN

Cheers.

thanks again
 
S

Steve Yandl

Scripting.Dictionary is part of the scripting runtimes. It is similar to an
array but has some characteristics that make it a lot simpler to use than an
array when you want to avoid duplicate values. This link will probably
break because of its length but this short article describes a vbs that uses
the scripting dictionary object. I think it will give you enough info to be
able to incorporate the object into your VBA projects.

http://www.microsoft.com/technet/scriptcenter/resources/qanda/oct06/hey1027.mspx

Steve
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top