Re: Outlook 2003 vba macro

From: Sue Mosher [MVP-Outlook] (suemvp_at_outlookcode.com)
Date: 03/31/04


Date: Wed, 31 Mar 2004 08:27:22 -0500

Don't move or delete items in a For Each loop! The index is reset each time,
which means you'll move only half. There are several different correct
approaches. One is a countdown loop:

'Move the email Item to the backup folder
intCount = objInbox.Items.Count
For i = intCount to 1 Step -1
    Set objMailItem = objInbox.Items(i)
    objMailItem.Move objPersonalInbox
If Err.Number = 438 Then
    GoTo skip
End If

-- 
Sue Mosher, Outlook MVP
Author of
     Microsoft Outlook Programming - Jumpstart for
     Administrators, Power Users, and Developers
     http://www.outlookcode.com/jumpstart.aspx
"Grant" <gpsnett@hotmail.com> wrote in message
news:ungzkurEEHA.624@TK2MSFTNGP10.phx.gbl...
> Heres the code (Im new to vba and this code is just me learning the
outlook
> object model)  - the error catch is there because the loop doesnt like
> 'undeliverable' items. The loop works fine but I have to run it for each
> group - ie 'today'. 'yesterday', 'last week'.
>
> Dim objApp As Application
> Dim objNS As NameSpace
> Dim objInbox As MAPIFolder
> Dim objPersonalFolder As MAPIFolder
> Dim objPersonalInbox As MAPIFolder
> Dim strHandyString As String
> Dim strMovedEmailItems As String
>
>
> strMovedEmailItems = "The following mail items were moved:" & vbCrLf &
> vbCrLf
>
> Set objApp = CreateObject("outlook.application")
> Set objNS = objApp.GetNamespace("mapi")
> Set objInbox = objNS.GetDefaultFolder(olFolderInbox)
>
> Set objMailItem = objInbox.Items
>
> 'Set the personal folder object
> For Each objfoldername In objNS.Folders
>     If objfoldername = "Personal Folders" Then
>         Set objPersonalFolder = objfoldername
>     End If
>
> Next
>
> 'Set the backup inbox folder object
> For Each objPersFolderName In objPersonalFolder.Folders
>     strHandyString = strHandyString & vbCrLf & objPersFolderName
>         If objPersFolderName = "Backup Inbox" Then
>             Set objPersonalInbox = objPersFolderName
>         End If
> Next
>
> 'Move the email Item to the backup folder
> For Each objMailItem In objInbox.Items
>     objMailItem.Move objPersonalInbox
> If Err.Number = 438 Then
>     GoTo skip
> End If
> Err.Clear
>     strMovedEmailItems = strMovedEmailItems & vbCrLf & objMailItem.Subject
&
> _
>     " - " & objMailItem.SenderName
> skip:
> Next
>
>
> 'Show the form with the results
> 'FrmResultsShow (strHandyString)
> FrmResultsShow (strMovedEmailItems)
>
>
> "Sue Mosher [MVP-Outlook]" <suemvp@outlookcode.com> wrote in message
> news:OZ6eZJmEEHA.3576@tk2msftngp13.phx.gbl...
> > Show the relevant section of your code. Looping through the items in a
> > folder is independent of a folder's current view.
> >
> > -- 
> > Sue Mosher, Outlook MVP
> > Author of
> >      Microsoft Outlook Programming - Jumpstart for
> >      Administrators, Power Users, and Developers
> >      http://www.outlookcode.com/jumpstart.aspx
> >
> >
> > "Grant" <gpsnett@hotmail.com> wrote in message
> > news:u91RH6kEEHA.3864@TK2MSFTNGP12.phx.gbl...
> > > My macro loops through all the messages in the inbox and moves them to
a
> > > folder in Public Folders.
> > > The problem is the inbox view is set to "View by date' and 'Show in
> > groups'
> > > so the macro copies all mail items from a certain day and then stops.
> > >
> > > For example at the moment I have mail items from 'Today' and
'Yesterday'
> > and
> > > 'Last week' etc. I will need to run the macro 3 times to move items
from
> > > each group. Instead of changing the view is there a way around this
> > grouping
> > > thing in Outlook 2003?
> > >
> > > Thanks,
> > > Grant
> > >
> > >
> >
> >
>
>


Relevant Pages

  • Re: ALSO
    ... All the script you cited does is replace one category with another. ... >>This is the folder that the user currently has displayed. ... >>>>Dim objFolder As Outlook.MAPIFolder ...
    (microsoft.public.outlook.program_forms)
  • Re: Need some help...
    ... folder structure that resembles; ... Dim strSourceDir As String = txtSelectDir.Text ... The Path.GetFileNamein the 2nd line of the loop is, ...
    (microsoft.public.dotnet.languages.vb)
  • RE: For Each loop not getting all Email Items
    ... collection and affecting the loop. ... It only finds about half of the emails in the Outlook folder. ... Dim colFolders As Object ' Outlook.Folders ... Set objFolder = objNS.Folders.Item) ...
    (microsoft.public.outlook.program_vba)
  • Re: Outlook 2003 vba macro
    ... Heres the code (Im new to vba and this code is just me learning the outlook ... The loop works fine but I have to run it for each ... Dim objApp As Application ... 'Set the backup inbox folder object ...
    (microsoft.public.outlook.program_vba)
  • RE: This VBS is using up all the memory
    ... statement out of the loop. ... > into a separate folder with the script, ... > Dim oWord ...
    (microsoft.public.scripting.vbscript)

Loading