Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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 |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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. WhytheQ wrote: 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 |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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" -- HTH... Jim Thomlinson "WhytheQ" wrote: 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 |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
nice one Jim
J Jim Thomlinson wrote: 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" -- HTH... Jim Thomlinson "WhytheQ" wrote: 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 |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
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. WhytheQ wrote: nice one Jim J Jim Thomlinson wrote: 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" -- HTH... Jim Thomlinson "WhytheQ" wrote: 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 |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Always display items AND Include hidden items in totals | Excel Discussion (Misc queries) | |||
xla creating new menu items | Excel Programming | |||
Dynamic PageField Items | Excel Programming | |||
Pivot Table calculated items with dynamic file source | Excel Programming | |||
Dynamic Selection of Pivottable Drop Down Items | Excel Programming |