eddyp
11-20-2009, 05:38 AM
Hi all,
Im new here and I cant get the code working what I got from this site (from killian) to Automatically save and print attachments from outlook. vbaexpress.com/kb/getarticle.php?kb_id=522
When I drop a mail with attachment in the Temp outlook folder I get a “Compile error: expected user-defined type, not project.” @ line: Sub TargetFolderItems_ItemAdd(ByVal Item As Object)
'########################################################################## #####
'### this is the ItemAdd event code
Sub TargetFolderItems_ItemAdd(ByVal Item As Object)
'when a new item is added to our "watched folder" we can process it
Dim olAtt As Attachment
Dim i As Integer
I try to get this working on office 2003 and now on 2007. I send this to a friend with 2007 and it worked but not on my system:banghead:
Thanks, Eduard
Below the complete code.
'########################################################################## #####
'### Module level Declarations
'expose the items in the target folder to events
Option Explicit
DimWithEvents TargetFolderItems As Items
'set the string constant for the path to save attachments
Const FILE_PATH AsString = "C:\Temp\"
'########################################################################## #####
'### this is the Application_Startup event code in the ThisOutlookSession module
PrivateSub Application_Startup()
'some startup code to set our "event-sensitive" items collection
Dim ns As Outlook.NameSpace
'
Set ns = Application.GetNamespace("MAPI")
Set TargetFolderItems = ns.Folders.Item( _
"Personal Folders").Folders.Item("Temp").Items
End Sub
'########################################################################## #####
'### this is the ItemAdd event code
Sub TargetFolderItems_ItemAdd(ByVal Item AsObject)
'when a new item is added to our "watched folder" we can process it
Dim olAtt As Attachment
Dim i AsInteger
If Item.Attachments.Count > 0 Then
For i = 1 To Item.Attachments.Count
Set olAtt = Item.Attachments(i)
'save the attachment
olAtt.SaveAsFile FILE_PATH & olAtt.FileName
'if its an Excel file, pass the filepath to the print routine
If UCase(Right(olAtt.FileName, 3)) = "XLS" Then
PrintAtt (FILE_PATH & olAtt.FileName)
EndIf
Next
EndIf
Set olAtt = Nothing
End Sub
'########################################################################## #####
'### this is the Application_Quit event code in the ThisOutlookSession module
PrivateSub Application_Quit()
Dim ns As Outlook.NameSpace
Set TargetFolderItems = Nothing
Set ns = Nothing
End Sub
'########################################################################## #####
'### print routine
Sub PrintAtt(fFullPath AsString)
Dim xlApp As Excel.Application
Dim wb As Excel.Workbook
'in the background, create an instance of xl then open, print, quit
Set xlApp = New Excel.Application
Set wb = xlApp.Workbooks.Open(fFullPath)
wb.PrintOut
xlApp.Quit
'tidy up
Set wb = Nothing
Set xlApp = Nothing
End Sub
How to use:
From Outlook, open the VBEditor (Alt+F11)
Add a reference to the "Microsoft Excel <your version number> Object Library fron Tools>References
Paste the code into the ThisOutlookSession module
Create an Outlook folder named "Temp" in your Personal folders (or amend the code: Set TargetFolderItems to eqaul an existing folder)
Create a directory "C:\Temp" (or amend the constant: FILE_PATH to eqaul an existing folder)
Save the project
Restart Outlook (or run the routine "Application_Startup")
Test the code:
Move a mail item with some attachments into you target folder.
The attachments will be saved in your specified directory
Any Excel files will be printed
Im new here and I cant get the code working what I got from this site (from killian) to Automatically save and print attachments from outlook. vbaexpress.com/kb/getarticle.php?kb_id=522
When I drop a mail with attachment in the Temp outlook folder I get a “Compile error: expected user-defined type, not project.” @ line: Sub TargetFolderItems_ItemAdd(ByVal Item As Object)
'########################################################################## #####
'### this is the ItemAdd event code
Sub TargetFolderItems_ItemAdd(ByVal Item As Object)
'when a new item is added to our "watched folder" we can process it
Dim olAtt As Attachment
Dim i As Integer
I try to get this working on office 2003 and now on 2007. I send this to a friend with 2007 and it worked but not on my system:banghead:
Thanks, Eduard
Below the complete code.
'########################################################################## #####
'### Module level Declarations
'expose the items in the target folder to events
Option Explicit
DimWithEvents TargetFolderItems As Items
'set the string constant for the path to save attachments
Const FILE_PATH AsString = "C:\Temp\"
'########################################################################## #####
'### this is the Application_Startup event code in the ThisOutlookSession module
PrivateSub Application_Startup()
'some startup code to set our "event-sensitive" items collection
Dim ns As Outlook.NameSpace
'
Set ns = Application.GetNamespace("MAPI")
Set TargetFolderItems = ns.Folders.Item( _
"Personal Folders").Folders.Item("Temp").Items
End Sub
'########################################################################## #####
'### this is the ItemAdd event code
Sub TargetFolderItems_ItemAdd(ByVal Item AsObject)
'when a new item is added to our "watched folder" we can process it
Dim olAtt As Attachment
Dim i AsInteger
If Item.Attachments.Count > 0 Then
For i = 1 To Item.Attachments.Count
Set olAtt = Item.Attachments(i)
'save the attachment
olAtt.SaveAsFile FILE_PATH & olAtt.FileName
'if its an Excel file, pass the filepath to the print routine
If UCase(Right(olAtt.FileName, 3)) = "XLS" Then
PrintAtt (FILE_PATH & olAtt.FileName)
EndIf
Next
EndIf
Set olAtt = Nothing
End Sub
'########################################################################## #####
'### this is the Application_Quit event code in the ThisOutlookSession module
PrivateSub Application_Quit()
Dim ns As Outlook.NameSpace
Set TargetFolderItems = Nothing
Set ns = Nothing
End Sub
'########################################################################## #####
'### print routine
Sub PrintAtt(fFullPath AsString)
Dim xlApp As Excel.Application
Dim wb As Excel.Workbook
'in the background, create an instance of xl then open, print, quit
Set xlApp = New Excel.Application
Set wb = xlApp.Workbooks.Open(fFullPath)
wb.PrintOut
xlApp.Quit
'tidy up
Set wb = Nothing
Set xlApp = Nothing
End Sub
How to use:
From Outlook, open the VBEditor (Alt+F11)
Add a reference to the "Microsoft Excel <your version number> Object Library fron Tools>References
Paste the code into the ThisOutlookSession module
Create an Outlook folder named "Temp" in your Personal folders (or amend the code: Set TargetFolderItems to eqaul an existing folder)
Create a directory "C:\Temp" (or amend the constant: FILE_PATH to eqaul an existing folder)
Save the project
Restart Outlook (or run the routine "Application_Startup")
Test the code:
Move a mail item with some attachments into you target folder.
The attachments will be saved in your specified directory
Any Excel files will be printed