View Single Post
  #2  
Old December 29th 06, 05:07 PM posted to microsoft.public.outlook.program_vba
Ken Slovak - [MVP - Outlook]
external usenet poster
 
Posts: 5,848
Default Multiplying Inspector Toolbar in Mail Item

Word does not honor the Temporary = True argument, so you must explicitly
delete your UI when a WordMail item closes. You should check for WordMail
(Inspector.IsWordMail) and take action based on that.

If you get the WordEditor object then WordEditor.Parent is the
Word.Application object. Any UI you add to Word goes into the current
Word.CustomizationContext and is displayed whether or not
Word.Window.EnvelopeVisible = True or not. That property tells you if a
WordMail window is active (True) or a document (False).

You can handle Word events in your code by declaring the Word.Application
object you get from WordMail WithEvents. Then the WindowActivate event would
let you test and see if the current Word window is a WordMail window or not
and act appropriately to hide or show your UI as needed.

--
Ken Slovak
[MVP - Outlook]
http://www.slovaktech.com
Author: Absolute Beginner's Guide to Microsoft Office Outlook 2003
Reminder Manager, Extended Reminders, Attachment Options
http://www.slovaktech.com/products.htm


"Irene" wrote in message
...
Outlook 2003.
Windows XP and Word as my email editor

Hi,


I found this code on the internet which I have been playing around with.
My
goal is to create two toolbars. One to show when you open a contact item
and
another to show when you open, create and mail item. The contact Toolbar
is
working perfect. It creates one when you open a contact item and deletes
it
when you close.

However the Mail item is keeping multiplying itself every time I create a
new mail item. And it shows up in Word.This only happens when I create an
new
item, not when I open an existing. Below is my code
-------------------------------------------------------------------------------------------
Class Module

Private WithEvents m_oInspector As Outlook.Inspector
Private WithEvents m_oMailItem As Outlook.MailItem
Private WithEvents m_oContactItem As Outlook.ContactItem


Private WithEvents ctlCBarControlF As Office.CommandBarButton
Private WithEvents ctlCBarControlM As Office.CommandBarButton
Private WithEvents ctlCBarControlT As Office.CommandBarButton
Private WithEvents ctlCBarControlL As Office.CommandBarButton

Private WithEvents ctlCBarControlSave As Office.CommandBarButton
Private WithEvents ctlCBarControlCategory As Office.CommandBarButton


Private m_lKey As Long




Friend Function Init(oInspector As Outlook.Inspector, ByVal lKey As Long)
As
Boolean
Set m_oInspector = oInspector

Select Case True


Case (TypeOf oInspector.CurrentItem Is Outlook.ContactItem)
Set m_oContactItem = oInspector.CurrentItem
m_lKey = lKey
CreateButton oInspector
Init = True

Case (TypeOf oInspector.CurrentItem Is Outlook.MailItem)
Set m_oMailItem = oInspector.CurrentItem
m_lKey = lKey
MailCreateButton oInspector
Init = True
End Select
End Function




Private Sub MailCreateButton(Inspector As Outlook.Inspector)
Set colCB = Inspector.CommandBars
Dim cbEmail As Office.CommandBar
Dim ctlCBarButton As Office.CommandBarButton
Dim ctlCBarCombo As Office.CommandBarComboBox
Dim ctlCBarPopup As Office.CommandBarPopup
On Error Resume Next
Set cbEmail = Inspector.CommandBars("Email Toolbar")
If Err = 0 Then

cbEmail.Delete

End If
Set cbEmail = Inspector.CommandBars _
.Add(Name:="Email Toolbar", Position:=msoBarTop)

Set ctlCBarPopup = cbEmail.Controls.Add(Type:=msoControlPopup)

Set ctlCBarControlSave =
ctlCBarPopup.Controls.Add(Type:=msoControlButton)
ctlCBarControlSave.Caption = "Save"

Set ctlCBarControlCategory =
ctlCBarPopup.Controls.Add(Type:=msoControlButton)
ctlCBarControlCategory.Caption = "Add Category"



With ctlCBarPopup
.Caption = "BBB Email Options"
End With


cbEmail.Visible = True
Set cbEmail = Nothing



End Sub

Private Sub CreateButton(Inspector As Outlook.Inspector)





Set colCB = Inspector.CommandBars
Dim cbTesting As Office.CommandBar
Dim ctlCBarButton As Office.CommandBarButton
Dim ctlCBarCombo As Office.CommandBarComboBox
Dim ctlCBarPopup As Office.CommandBarPopup
On Error Resume Next
Set cbTesting = Inspector.CommandBars("Toolbar")
If Err = 0 Then
cbTesting.Delete

End If
Set cbTesting = Inspector.CommandBars _
.Add(Name:="Toolbar", Position:=msoBarTop)

Set ctlCBarPopup = cbTesting.Controls.Add(Type:=msoControlPopup)

'Set ctlCBarControlF =
ctlCBarPopup.Controls.Add(Type:=msoControlButton)
'ctlCBarControlF.Caption = "Fax"

Set ctlCBarControlL = ctlCBarPopup.Controls.Add(Type:=msoControlButton)
ctlCBarControlL.Caption = "Letter"

'Set ctlCBarControlM =
ctlCBarPopup.Controls.Add(Type:=msoControlButton)
'ctlCBarControlM.Caption = "Memo"

Set ctlCBarControlT = ctlCBarPopup.Controls.Add(Type:=msoControlButton)
ctlCBarControlT.Caption = "Transmittal"

With ctlCBarPopup
.Caption = "Correspondence"
End With


cbTesting.Visible = True





End Sub


Friend Sub CloseInspector()
On Error Resume Next
Application.RemoveInspector m_lKey
Set YourButton = Nothing
Set m_oMailItem = Nothing
Set m_oInspector = Nothing
End Sub


Private Sub Class_Initialize()
' In this case this method isn´t necessary but helps to _
understand what´s going on.
' Before executing this method this object doesn´t exist. _
That is, the member (variables) are unkown, no events can _
be received etc.
End Sub


Private Sub Class_Terminate()
' In this case this method isn´t necessary but helps to _
understand what´s going on.
' This method is being executed if the object is being destroyed. _
That is, after that all member are unknown again.
End Sub


' Set breakpoint (F9) at the next line
Private Sub m_oInspector_Close()


On Error Resume Next
Set cbTesting = Application.ActiveInspector.CommandBars("Toolbar")
If Err = 0 Then
cbTesting.Delete

End If



Set cbEmail = Application.ActiveInspector.CommandBars("Email Toolbar")
If Err = 0 Then
cbEmail.Delete
End If
CloseInspector
End Sub


' Set breakpoint (F9) at the next line
Private Sub m_oMailItem_Close(Cancel As Boolean)
On Error Resume Next

' If m_oMailItem.Saved Then

Set cbEmail = Application.ActiveInspector.CommandBars("Email Toolbar")
If Err = 0 Then
cbEmail.Delete
End If
CloseInspector
' End If
End Sub


' Set breakpoint (F9) at the next line
Private Sub m_oMailItem_Send(Cancel As Boolean)
On Error Resume Next


Set cbEmail = Application.ActiveInspector.CommandBars("Email Toolbar")
If Err = 0 Then
cbEmail.Delete
End If
CloseInspector
End Sub
' Set breakpoint (F9) at the next line
Private Sub m_oContactItem_Close(Cancel As Boolean)



On Error Resume Next
Set cbTesting = Application.ActiveInspector.CommandBars("Toolbar")
If Err = 0 Then
cbTesting.Delete

End If


CloseInspector

End Sub





Private Sub ctlCBarControlSave_Click(ByVal Ctrl As
Office.CommandBarButton, _
CancelDefault As Boolean _
)


frmEmail.Show vbModal
'vbModeless




End Sub


Private Sub ctlCBarControlCategory_Click(ByVal Ctrl As
Office.CommandBarButton, _
CancelDefault As Boolean _
)

frmCategory.Show


End Sub

ThisOutlook Session


Private Sub Application_Startup()
On Error Resume Next
Dim objNS As NameSpace

Set m_colInspectors = Application.Inspectors
Set m_coll = New VBA.Collection


Set objNS = Nothing
End Sub

' Set breakpoint (F9) at the next line
Private Sub m_colInspectors_NewInspector(ByVal Inspector As
Outlook.Inspector)
' Check the Inspector´s CurrentItem type and decide _
whether to handle that type or not.
Select Case True
Case (TypeOf Inspector.CurrentItem Is Outlook.MailItem)
AddMailItemWrapper Inspector

Case (TypeOf Inspector.CurrentItem Is Outlook.ContactItem)
'CreateButton Inspector
AddMailItemWrapper Inspector

End Select

End Sub
Private Sub AddMailItemWrapper(oInspector As Outlook.Inspector)
Dim oChild As cInspector


' Create and init a new Inspector wrapper.
Set oChild = New cInspector
If oChild.Init(oInspector, m_lNextKey) Then
m_coll.Add oChild, CStr(m_lNextKey)
m_lNextKey = m_lNextKey + 1
End If
End Sub


Public Sub RemoveInspector(ByVal lKey As Long)
On Error Resume Next
m_coll.Remove CStr(lKey)
End Sub



Ads