A Microsoft Outlook email forum. Outlook Banter

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » Outlook Banter forum » Microsoft Outlook Email Newsgroups » Outlook and VBA
Site Map Home Register Authors List Search Today's Posts Mark Forums Read Web Partners

Tags: , , , , ,

Newly-typed email address not appearing in Recipients collection





 
 
Thread Tools Display Modes
  #1  
Old October 13th 06, 05:31 PM posted to microsoft.public.outlook.program_vba
Andy Bowles
external usenet poster
 
Posts: 6
Default Newly-typed email address not appearing in Recipients collection


If I do this:

- Create a new email message
- Type an email address into the "To:" field, without moving to
another field
- Click a Commandbar button which runs some VBA

The email address I have just typed doesn't appear in the message's
Recipients collection.

Doing a ResolveAll doesn't seem to help - the newly-typed address just
disappears from the form entirely.

Is there any way I can force Outlook to add the newly-typed address to
the Recipients collection before it does anything else? That is, I
want Outlook to do whatever it would have done if I had moved the focus
to another field.

Outlook Version: 2003 SP2
O/S: XP Home SP2

Thanks.

Andy Bowles

Ads
  #2  
Old October 13th 06, 10:03 PM posted to microsoft.public.outlook.program_vba
Eric Legault [MVP - Outlook]
external usenet poster
 
Posts: 817
Default Newly-typed email address not appearing in Recipients collection

Strange. Could you show your code please?

Try creating a new e-mail, add one recipient and run this code:

Dim objMail As Outlook.MailItem
Dim objRs As Outlook.Recipients

Set objMail = ActiveInspector.CurrentItem
Set objRs = objMail.Recipients
Debug.Print objRs.count & " recipients in message"
Set objRs = Nothing
Set objMail = Nothing

Is there anything in the Recipients collection when you run this?

--
Eric Legault (Outlook MVP, MCDBA, MCTS: Messaging & Collaboration)
Try Picture Attachments Wizard for Outlook:
http://www.collaborativeinnovations.ca
Blog: http://blogs.officezealot.com/legault/


"Andy Bowles" wrote:


If I do this:

- Create a new email message
- Type an email address into the "To:" field, without moving to
another field
- Click a Commandbar button which runs some VBA

The email address I have just typed doesn't appear in the message's
Recipients collection.

Doing a ResolveAll doesn't seem to help - the newly-typed address just
disappears from the form entirely.

Is there any way I can force Outlook to add the newly-typed address to
the Recipients collection before it does anything else? That is, I
want Outlook to do whatever it would have done if I had moved the focus
to another field.

Outlook Version: 2003 SP2
O/S: XP Home SP2

Thanks.

Andy Bowles


  #3  
Old October 14th 06, 12:38 AM posted to microsoft.public.outlook.program_vba
Andy Bowles
external usenet poster
 
Posts: 6
Default Newly-typed email address not appearing in Recipients collection

Eric wrote:
Strange. Could you show your code please?

Try creating a new e-mail, add one recipient and run this code:

Dim objMail As Outlook.MailItem
Dim objRs As Outlook.Recipients

Set objMail = ActiveInspector.CurrentItem
Set objRs = objMail.Recipients
Debug.Print objRs.count & " recipients in message"
Set objRs = Nothing
Set objMail = Nothing

Is there anything in the Recipients collection when you run this?


No - it's empty.

The code which I'm actually trying to make work is part of a COM
Add-in. However, when I came across the problem I tried something
similar to your test code above, and got the same result.

The problem doesn't occur if Outlook has automatically completed the
address, and it doesn't occur if I have clicked outside the To: box.

I have reproduced this behaviour on several different machines. Do
other people get the same thing, or is it just me?

I have been looking for ways to trick Outlook into populating the
Recipients collection. So far I have tried:

(1) objMail.Save

(2) objMail.subject = objMail.subject

(3) objMail.Body = objMail.Body

(4) objMail.HTMLBody = objMail.HTMLBody

(5) ActiveExplorer.Activate
objMail.GetInspector.Activate
DoEvents
SendKeys "+{TAB}"
DoEvents

(1), (2) and (3) have no useful effect.
(4) does what I want, but has the disadvantage of changing the email to
HTML format.
(5) works, but scares me.

Does anyone have any better ideas? For example, is it possible to set
the focus to a different control within the inspector?

Andy Bowles

  #4  
Old October 14th 06, 06:52 AM posted to microsoft.public.outlook.program_vba
Eric Legault [MVP - Outlook]
external usenet poster
 
Posts: 817
Default Newly-typed email address not appearing in Recipients collecti

The key question here is *when* are you trying to access the Recipients
collection? If you need to trap this immediately after someone addresses an
e-mail, then use the PropertyChange event and trap changes to the To property.

I'd still like to see your code to provide context.

--
Eric Legault (Outlook MVP, MCDBA, MCTS: Messaging & Collaboration)
Try Picture Attachments Wizard for Outlook:
http://www.collaborativeinnovations.ca
Blog: http://blogs.officezealot.com/legault/


"Andy Bowles" wrote:

Eric wrote:
Strange. Could you show your code please?

Try creating a new e-mail, add one recipient and run this code:

Dim objMail As Outlook.MailItem
Dim objRs As Outlook.Recipients

Set objMail = ActiveInspector.CurrentItem
Set objRs = objMail.Recipients
Debug.Print objRs.count & " recipients in message"
Set objRs = Nothing
Set objMail = Nothing

Is there anything in the Recipients collection when you run this?


No - it's empty.

The code which I'm actually trying to make work is part of a COM
Add-in. However, when I came across the problem I tried something
similar to your test code above, and got the same result.

The problem doesn't occur if Outlook has automatically completed the
address, and it doesn't occur if I have clicked outside the To: box.

I have reproduced this behaviour on several different machines. Do
other people get the same thing, or is it just me?

I have been looking for ways to trick Outlook into populating the
Recipients collection. So far I have tried:

(1) objMail.Save

(2) objMail.subject = objMail.subject

(3) objMail.Body = objMail.Body

(4) objMail.HTMLBody = objMail.HTMLBody

(5) ActiveExplorer.Activate
objMail.GetInspector.Activate
DoEvents
SendKeys "+{TAB}"
DoEvents

(1), (2) and (3) have no useful effect.
(4) does what I want, but has the disadvantage of changing the email to
HTML format.
(5) works, but scares me.

Does anyone have any better ideas? For example, is it possible to set
the focus to a different control within the inspector?

Andy Bowles


  #5  
Old October 15th 06, 02:33 PM posted to microsoft.public.outlook.program_vba
Andy Bowles
external usenet poster
 
Posts: 6
Default Newly-typed email address not appearing in Recipients collecti

Eric wrote:
The key question here is *when* are you trying to access the Recipients
collection?


I'm trying to access the Recipients collection when the user clicks a
button from an Inspector. The code behind the button writes some
information to a database, based partly on what's in the Recipients
collection, and then sends the email.

Usually the user will enter the address, then the subject, and then the
message body, before clicking my button. If they do things in this
order, everything works fine, because the address will have made its
way into the Recipients collection.

The problem occurs if the last thing they do is to enter or change the
address. If they do that, the address doesn't appear in the Recipients
collection, and isn't processed by my code.

If you need to trap this immediately after someone addresses an
e-mail, then use the PropertyChange event and trap changes to the To property.


After some experimentation, I have found that the "To" property is
updated at the same time as the Recipients collection, so using
PropertyChange won't help.

I'd still like to see your code to provide context.


I can't publish all of my code, but here are some edited highlights:

Option Explicit

Implements IDTExtensibility2

Private WithEvents outlookapp As Outlook.Application
Private WithEvents outlookInspectors As Outlook.Inspectors
Private WithEvents testButton As Office.CommandBarButton
Private Const addinName = "TestAddin.Main"

Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
' Do nothing
End Sub

Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
Set outlookInspectors = Nothing
Set outlookapp = Nothing
Set testButton = Nothing
End Sub

Private Sub IDTExtensibility2_OnConnection( _
ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, custom() As Variant)

Set outlookapp = Application
Set outlookInspectors = outlookapp.Inspectors
Application.COMAddIns.Item(addinName).object = Me
End Sub

Private Sub IDTExtensibility2_OnDisconnection( _
ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _
custom() As Variant)

' Do nothing
End Sub

Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
' Do nothing
End Sub

Private Sub outlookInspectors_NewInspector(ByVal Inspector As
Outlook.Inspector)
On Error GoTo error_handler
Dim cmdbar As CommandBar

' Create toolbar buttons if not already present
Set cmdbar = Inspector.CommandBars("Standard")

If testButton Is Nothing Then Set testButton = CreateButton(cmdbar,
"Test button")
cmdbar.Controls("Test button").Visible = True

sub_end:
Set cmdbar = Nothing
Exit Sub

error_handler:
MsgBox "Error displaying email: " & Err.Number & " - " &
Err.Description
On Error Resume Next
Resume sub_end
End Sub

Private Sub testButton_Click(ByVal Ctrl As Office.CommandBarButton,
CancelDefault As Boolean)
Dim r As Outlook.Recipient
Dim Item As Outlook.MailItem

Set Item = ActiveInspector.CurrentItem
MsgBox "Recipient count: " & Item.Recipients.Count

For Each r In Item.Recipients
' More interesting code normally appears here
MsgBox "Recipient: " & r.Address
Next r

Set Item = Nothing
Set r = Nothing
End Sub

Private Function CreateButton(cmdbar As CommandBar, buttonName As
String) As CommandBarButton
Dim btn As CommandBarButton

On Error Resume Next
Set btn = cmdbar.Controls.Item(buttonName)

If Err.Number 0 Then
Err.Clear
On Error GoTo 0
Set btn = cmdbar.Controls.Add(msoControlButton)
btn.Caption = buttonName
End If

On Error GoTo 0

With btn
.Style = msoButtonCaption
.Tag = buttonName
.OnAction = "!" & addinName & ""
.Visible = False
End With

Set CreateButton = btn
End Function

  #6  
Old October 16th 06, 05:53 AM posted to microsoft.public.outlook.program_vba
Eric Legault [MVP - Outlook]
external usenet poster
 
Posts: 817
Default Newly-typed email address not appearing in Recipients collecti

I don't know what to say Andrew. If I run the code I gave you on a new
e-mail, with an unresolved address in the To: line, and I don't tab away but
instead directly run that macro, the Recipients collection has one item.

I'm fishing here, but is there a chance you are accidentally capturing
another e-mail via ActiveInspector? You may want to consider using an
Inspector Wrapper, which is a best practice for COM Add-Ins, especially when
you're dealing with custom toolbars and menus. There's an example of this
method he

Slovak Technical Services Code Samples:
http://www.slovaktech.com/code_sampl...spectorWrapper

But there's no guarantee that this will solve your problem, unfortunately.

--
Eric Legault (Outlook MVP, MCDBA, MCTS: Messaging & Collaboration)
Try Picture Attachments Wizard for Outlook:
http://www.collaborativeinnovations.ca
Blog: http://blogs.officezealot.com/legault/


"Andy Bowles" wrote:

Eric wrote:
The key question here is *when* are you trying to access the Recipients
collection?


I'm trying to access the Recipients collection when the user clicks a
button from an Inspector. The code behind the button writes some
information to a database, based partly on what's in the Recipients
collection, and then sends the email.

Usually the user will enter the address, then the subject, and then the
message body, before clicking my button. If they do things in this
order, everything works fine, because the address will have made its
way into the Recipients collection.

The problem occurs if the last thing they do is to enter or change the
address. If they do that, the address doesn't appear in the Recipients
collection, and isn't processed by my code.

If you need to trap this immediately after someone addresses an
e-mail, then use the PropertyChange event and trap changes to the To property.


After some experimentation, I have found that the "To" property is
updated at the same time as the Recipients collection, so using
PropertyChange won't help.

I'd still like to see your code to provide context.


I can't publish all of my code, but here are some edited highlights:

Option Explicit

Implements IDTExtensibility2

Private WithEvents outlookapp As Outlook.Application
Private WithEvents outlookInspectors As Outlook.Inspectors
Private WithEvents testButton As Office.CommandBarButton
Private Const addinName = "TestAddin.Main"

Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
' Do nothing
End Sub

Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
Set outlookInspectors = Nothing
Set outlookapp = Nothing
Set testButton = Nothing
End Sub

Private Sub IDTExtensibility2_OnConnection( _
ByVal Application As Object, _
ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
ByVal AddInInst As Object, custom() As Variant)

Set outlookapp = Application
Set outlookInspectors = outlookapp.Inspectors
Application.COMAddIns.Item(addinName).object = Me
End Sub

Private Sub IDTExtensibility2_OnDisconnection( _
ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, _
custom() As Variant)

' Do nothing
End Sub

Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
' Do nothing
End Sub

Private Sub outlookInspectors_NewInspector(ByVal Inspector As
Outlook.Inspector)
On Error GoTo error_handler
Dim cmdbar As CommandBar

' Create toolbar buttons if not already present
Set cmdbar = Inspector.CommandBars("Standard")

If testButton Is Nothing Then Set testButton = CreateButton(cmdbar,
"Test button")
cmdbar.Controls("Test button").Visible = True

sub_end:
Set cmdbar = Nothing
Exit Sub

error_handler:
MsgBox "Error displaying email: " & Err.Number & " - " &
Err.Description
On Error Resume Next
Resume sub_end
End Sub

Private Sub testButton_Click(ByVal Ctrl As Office.CommandBarButton,
CancelDefault As Boolean)
Dim r As Outlook.Recipient
Dim Item As Outlook.MailItem

Set Item = ActiveInspector.CurrentItem
MsgBox "Recipient count: " & Item.Recipients.Count

For Each r In Item.Recipients
' More interesting code normally appears here
MsgBox "Recipient: " & r.Address
Next r

Set Item = Nothing
Set r = Nothing
End Sub

Private Function CreateButton(cmdbar As CommandBar, buttonName As
String) As CommandBarButton
Dim btn As CommandBarButton

On Error Resume Next
Set btn = cmdbar.Controls.Item(buttonName)

If Err.Number 0 Then
Err.Clear
On Error GoTo 0
Set btn = cmdbar.Controls.Add(msoControlButton)
btn.Caption = buttonName
End If

On Error GoTo 0

With btn
.Style = msoButtonCaption
.Tag = buttonName
.OnAction = "!" & addinName & ""
.Visible = False
End With

Set CreateButton = btn
End Function


  #7  
Old October 16th 06, 10:53 AM posted to microsoft.public.outlook.program_vba
Andy Bowles
external usenet poster
 
Posts: 6
Default Newly-typed email address not appearing in Recipients collecti


Eric wrote:
I don't know what to say Andrew. If I run the code I gave you on a new
e-mail, with an unresolved address in the To: line, and I don't tab away but
instead directly run that macro, the Recipients collection has one item.


Very mysterious.

I'm fishing here, but is there a chance you are accidentally capturing
another e-mail via ActiveInspector?


No, it's definitely the right inspector.

You may want to consider using an
Inspector Wrapper, which is a best practice for COM Add-Ins, especially when
you're dealing with custom toolbars and menus. There's an example of this
method he

Slovak Technical Services Code Samples:
http://www.slovaktech.com/code_sampl...spectorWrapper


Yes, this does look a more robust way to do things.

But there's no guarantee that this will solve your problem, unfortunately.


No, the problem does seem to be independent of the Add-In. I think
I'll use a variant of the SendKeys kludge I posted earlier.

Many thanks for your help.

Andy Bowles

 




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
IP address 127.0.0.1 appearing POP3 server address box. Martin P Outlook Express 12 January 2nd 07 07:31 PM
Problems with email collection in Outlook 2003 Trent SC Outlook - General Queries 2 September 26th 06 10:11 PM
Having trouble getting my newly added email account to work Cary, NC Outlook - Installation 5 September 6th 06 10:40 PM
Contact not appearing in Global Address List Andy Wolsten Outlook - Using Contacts 1 April 28th 06 08:54 AM
Cursor on new message window but no text appears when typed? TommieC Outlook - General Queries 0 March 15th 06 07:13 AM


All times are GMT +1. The time now is 03:18 AM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2008 Outlook Banter, part of the NewsgroupBanter project.
The comments are property of their posters.
Shares - Personal Car Finance - Buy PSP - Internet Advertising - Credit Cards UK