attachment delete problem

A

Antonio

the following code is called from whithin an Excel VBA module.

It works fine but it leaves an attachment that should not be left, its name
does not start by "Situ".

The attachment that is left is a workbook .xls that I click on and then run
the excel macro.

How can I get rid of this unwanted attachment?

When I loop through it in the For each attach it does not go through it, as
if it did not exist.

Dim myolApp As Outlook.Application
Dim myinspector As Outlook.Inspector
Dim myItem As Outlook.MailItem
Dim myattachments As Outlook.Attachments
Dim attach As Outlook.Attachment

Set myolApp = CreateObject("Outlook.Application")
Set myinspector = myolApp.ActiveInspector

If Not TypeName(myinspector) = "Nothing" Then
Set myItem = myinspector.CurrentItem.Forward
Set myattachments = myItem.Attachments

For Each attach In myattachments
If Left(attach.Filename, 4) <> "Situ" Then attach.Delete
Next attach

With myItem

.To = "(e-mail address removed)"
.Subject = "test"
.BodyFormat = olFormatHTML

.HTMLBody = "<HTML><BODY>Saludos cordiales. <br></br><B><br><b>
Antonio<br>N</b></br></BODY></HTML>"

.Display

End With

Else
MsgBox "There is no active inspector."
End If
 
A

Antonio

I have found some code that solves my needs:

While myattachments.Count > 1
For Each attach In myattachments
If Left(attach.Filename, 4) <> "Situ" Then attach.Delete
Next attach
Wend

Apparently the attach.delete affects the attachment index.

The iteration above with the while .count>1 works.

Is there a more direct way to do it?

Thanks,

Antonio
 
E

Eric Legault [MVP - Outlook]

When removing things from a collection during a loop, you must count down in
reverse:

For intX = Attachments.Count To 1 Step -1
Set myAttachment = Attachments.Item(intx)
myAttachment.Delete
Next
 
S

Sue Mosher [MVP-Outlook]

The other way is with a countdown loop:

count = myattachments.Count
For i = count to 1 Step -1
Set attach = myattachments.Item(i)
attach.Delete
Next

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
 
A

Antonio

Thank you Eric and Sue for the solution.

I have used a slightly different one:

For i = myattachments.Count To 1 Step -1

If Left(myattachments(i).Filename, 7) <> "Situaci" Then
myattachments(i).Delete

Next i
 

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