WHY OH WHY! ... creating a dynamic array of outlookmail items, then display them.

  • Thread starter Thread starter WhytheQ
  • Start date Start date
W

WhytheQ

I'm using the following code, with NO reference to outlook:


Dim objOutlook As Object
Dim objMailItem As Object

Dim myCreatedEmails() As Object

Sub CreateAndDisplayEmails()

Set objOutlook = CreateObject("Outlook.Application")

Erase myCreatedEmails

For i = 1 To 3

Set objMailItem = objOutlook.CreateItem(0)

With objMailItem
.To = "Tester" & i
.Subject = "Tester" & i
End With

ReDim myCreatedEmails(k)
'##### falls down on next line #####
myCreatedEmails(k) = objMailItem
k = k + 1

Next i

For k = 1 To UBound(myCreatedEmails)
myCreatedEmails(k).Display
Next k

End Sub


....I've marked where it already falls down and I assume even if this
line is fixed then it'll fall down later on on the line
"myCreatedEmails(k).Display"

The above must be pretty bl##dy close!...can anyone help?

Help appreciated
Jason
 
A couple of things wrong with that off the top of my head.
1. You are missing the "preserve" key word. Without that each time you redim
all of the previous items stored in the array will be blown away. you
probably want.
ReDim Preserve myCreatedEmails(k)

2. An object reference requires the "Set" key word.
set myCreatedEmails(k) = objMailItem

Just curious. Why not use a collection, instead of a dynamic array. Ususally
they are a bit more handy for storing groups of objects...

dim colCreatedEmails as collection

set colCreatedEmails as new collection

colCreatedEmails.add objMailItem, "Some Unique Key"
 
How does it "fall down"? That is, what error do you get?

Just a guess, but it looks like you would lose previous myCreatedEmails
entries as you run through your For/Next loop because you used ReDim
instead of ReDim Preserve. ReDim by itself clears the array.
 
nice one Jim
J


Jim said:
A couple of things wrong with that off the top of my head.
1. You are missing the "preserve" key word. Without that each time you redim
all of the previous items stored in the array will be blown away. you
probably want.
ReDim Preserve myCreatedEmails(k)

2. An object reference requires the "Set" key word.
set myCreatedEmails(k) = objMailItem

Just curious. Why not use a collection, instead of a dynamic array. Ususally
they are a bit more handy for storing groups of objects...

dim colCreatedEmails as collection

set colCreatedEmails as new collection

colCreatedEmails.add objMailItem, "Some Unique Key"
 
Hi Jim
How about the below? (on a machine without outlook at the moment so
can't unfortunately test it)

Option Explicit

Dim objOutlook As Object
Dim objMailItem As Object

Dim i As Integer

Dim myCreatedEmails As Collection


Sub CreateAndDisplayEmails()


Set objOutlook = CreateObject("Outlook.Application")

Set myCreatedEmails = New Collection

For i = 1 To 3


Set objMailItem = objOutlook.CreateItem(0)


With objMailItem
.To = "Tester" & i
.Subject = "Tester" & i
End With

myCreatedEmails.Add objMailItem, i

Next i


For i = 1 To myCreatedEmails.Count
myCreatedEmails(i).Display
Next i


End Sub

I'm not too sure if the Display method is going to work?!
Help greatly appreciated.
Jason.
 
Back
Top