J
Josh Asbury
<< I originally posted this in microsoft.public.dotnet.framework.interop,
and then realized that this might be a better landing pad for it. >>
I am really struggling with something that is going on in an Excel menu
add-in that I have written ( Code snippets are below ) using Visual VB.net
2002. If a commandbar has the same caption as another commandbar elsewhere
in the menu structure, it calls both Click events and subsequently inserts
my custom text twice. Using the code below as an example, both DatesText(0)
and CaseDataDates are set to "Arrangement Date ( January 1, 2004 )". If I
choose one of these menu items, my code fires the Click events for both
CommandBarButtons and subsequently inserts my custom text
("%%=$MMP.CaseArrangementDate") twice.
The same thing was happening with DatesText(1) and
CaseDataDatesInsertText(1) until I set DatesText(0) to "Case Birth Date Day
( 01 )". At that point, only the click event for DatesTextMenuItem1 is
fired (as I wish and expect to happen).
Does anyone have any idea why this is happening and what I can do to fix it?
If I execute this code outside of an Add-in/Interop scenario, it works like
a champ. I'm relatively new to the .net world and Windows programming in
general (I'm a Java guy), so please slap me upside the head and show me the
err of my ways.
Thanks!
Josh
------------------- Declarations ----------------------
'Dates Menu
Private DatesText(1) As String
Private DatesInsertText(1) As String
Private MenuBarDatesCBC As CommandBarPopup
Private WithEvents DatesTextMenuItem0 As CommandBarButton
Private WithEvents DatesTextMenuItem0 As CommandBarButton
'Case Dates Menu
Private CaseDataDatesText(1) As String
Private CaseDataDatesInsertText(1) As String
Private MenuBarCaseDatesCBC As CommandBarPopup
Private WithEvents CaseDatesTextMenuItem0 As CommandBarButton
-------------------- Assignments and Menu Creations -----------------
DatesText(0) = "Arrangement Date ( January 1, 2004 )"
DatesText(1) = "Case Birth Date Day ( 01 )"
DatesInsertText(0) = "%%=$MMP.CaseArrangementDate"
DatesInsertText(1) = "%%=$MMP.CaseBirthDateDay"
'Add the Dates Menu
MenuBarDatesCBC = MenuBarItem.Controls.Add( _
MsoControlType.msoControlPopup, Temporary:=True)
MenuBarDatesCBC.Caption = "Dates"
DatesTextMenuItem0 = MenuBarDatesCBC.Controls.Add(msoControlButton)
With DatesTextMenuItem0
.Caption = DatesText(0)
.Style = msoButtonCaption
.Tag = DatesText(0)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
DatesTextMenuItem1 = MenuBarDatesCBC.Controls.Add(msoControlButton)
With DatesTextMenuItem1
.Caption = DatesText(1)
.Style = msoButtonCaption
.Tag = DatesText(1)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
CaseDataDatesText(0) = "Arrangement Date ( January 1, 2004 )"
CaseDataDatesText(1) = "Birth Date Day ( 01 )"
CaseDataDatesInsertText(6) = "%%=$MMP.CaseArrangementDate"
CaseDataDatesInsertText(7) = "%%=$MMP.CaseBirthDateDay"
CaseDatesTextMenuItem0 =
MenuBarCaseDatesCBC.Controls.Add(msoControlButton)
With CaseDatesTextMenuItem0
.Caption = CaseDataDatesText(0)
.Style = msoButtonCaption
.Tag = CaseDataDatesText(0)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
CaseDatesTextMenuItem0 =
MenuBarCaseDatesCBC.Controls.Add(msoControlButton)
With CaseDatesTextMenuItem0
.Caption = CaseDataDatesText(0)
.Style = msoButtonCaption
.Tag = CaseDataDatesText(0)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
---------------------------- Click
Events -------------------------------------------------
Private Sub DatesTextMenuItem0_Click(ByVal Ctrl As CommandBarButton,
ByRef CancelDefault As Boolean) Handles DatesTextMenuItem0.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = DatesInsertText(0)
End Sub
Private Sub DatesTextMenuItem1_Click(ByVal Ctrl As CommandBarButton,
ByRef CancelDefault As Boolean) Handles DatesTextMenuItem1.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = DatesInsertText(1)
End Sub
Private Sub CaseDatesTextMenuItem0_Click(ByVal Ctrl As
CommandBarButton, ByRef CancelDefault As Boolean) Handles
CaseDatesTextMenuItem0.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = CaseDataDatesInsertText(0)
End Sub
Private Sub CaseDatesTextMenuItem1_Click(ByVal Ctrl As
CommandBarButton, ByRef CancelDefault As Boolean) Handles
CaseDatesTextMenuItem1.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = CaseDataDatesInsertText(1)
End Sub
and then realized that this might be a better landing pad for it. >>
I am really struggling with something that is going on in an Excel menu
add-in that I have written ( Code snippets are below ) using Visual VB.net
2002. If a commandbar has the same caption as another commandbar elsewhere
in the menu structure, it calls both Click events and subsequently inserts
my custom text twice. Using the code below as an example, both DatesText(0)
and CaseDataDates are set to "Arrangement Date ( January 1, 2004 )". If I
choose one of these menu items, my code fires the Click events for both
CommandBarButtons and subsequently inserts my custom text
("%%=$MMP.CaseArrangementDate") twice.
The same thing was happening with DatesText(1) and
CaseDataDatesInsertText(1) until I set DatesText(0) to "Case Birth Date Day
( 01 )". At that point, only the click event for DatesTextMenuItem1 is
fired (as I wish and expect to happen).
Does anyone have any idea why this is happening and what I can do to fix it?
If I execute this code outside of an Add-in/Interop scenario, it works like
a champ. I'm relatively new to the .net world and Windows programming in
general (I'm a Java guy), so please slap me upside the head and show me the
err of my ways.
Thanks!
Josh
------------------- Declarations ----------------------
'Dates Menu
Private DatesText(1) As String
Private DatesInsertText(1) As String
Private MenuBarDatesCBC As CommandBarPopup
Private WithEvents DatesTextMenuItem0 As CommandBarButton
Private WithEvents DatesTextMenuItem0 As CommandBarButton
'Case Dates Menu
Private CaseDataDatesText(1) As String
Private CaseDataDatesInsertText(1) As String
Private MenuBarCaseDatesCBC As CommandBarPopup
Private WithEvents CaseDatesTextMenuItem0 As CommandBarButton
-------------------- Assignments and Menu Creations -----------------
DatesText(0) = "Arrangement Date ( January 1, 2004 )"
DatesText(1) = "Case Birth Date Day ( 01 )"
DatesInsertText(0) = "%%=$MMP.CaseArrangementDate"
DatesInsertText(1) = "%%=$MMP.CaseBirthDateDay"
'Add the Dates Menu
MenuBarDatesCBC = MenuBarItem.Controls.Add( _
MsoControlType.msoControlPopup, Temporary:=True)
MenuBarDatesCBC.Caption = "Dates"
DatesTextMenuItem0 = MenuBarDatesCBC.Controls.Add(msoControlButton)
With DatesTextMenuItem0
.Caption = DatesText(0)
.Style = msoButtonCaption
.Tag = DatesText(0)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
DatesTextMenuItem1 = MenuBarDatesCBC.Controls.Add(msoControlButton)
With DatesTextMenuItem1
.Caption = DatesText(1)
.Style = msoButtonCaption
.Tag = DatesText(1)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
CaseDataDatesText(0) = "Arrangement Date ( January 1, 2004 )"
CaseDataDatesText(1) = "Birth Date Day ( 01 )"
CaseDataDatesInsertText(6) = "%%=$MMP.CaseArrangementDate"
CaseDataDatesInsertText(7) = "%%=$MMP.CaseBirthDateDay"
CaseDatesTextMenuItem0 =
MenuBarCaseDatesCBC.Controls.Add(msoControlButton)
With CaseDatesTextMenuItem0
.Caption = CaseDataDatesText(0)
.Style = msoButtonCaption
.Tag = CaseDataDatesText(0)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
CaseDatesTextMenuItem0 =
MenuBarCaseDatesCBC.Controls.Add(msoControlButton)
With CaseDatesTextMenuItem0
.Caption = CaseDataDatesText(0)
.Style = msoButtonCaption
.Tag = CaseDataDatesText(0)
.OnAction = "!<MMPExcelCOM.Connect>"
.Visible = True
End With
---------------------------- Click
Events -------------------------------------------------
Private Sub DatesTextMenuItem0_Click(ByVal Ctrl As CommandBarButton,
ByRef CancelDefault As Boolean) Handles DatesTextMenuItem0.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = DatesInsertText(0)
End Sub
Private Sub DatesTextMenuItem1_Click(ByVal Ctrl As CommandBarButton,
ByRef CancelDefault As Boolean) Handles DatesTextMenuItem1.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = DatesInsertText(1)
End Sub
Private Sub CaseDatesTextMenuItem0_Click(ByVal Ctrl As
CommandBarButton, ByRef CancelDefault As Boolean) Handles
CaseDatesTextMenuItem0.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = CaseDataDatesInsertText(0)
End Sub
Private Sub CaseDatesTextMenuItem1_Click(ByVal Ctrl As
CommandBarButton, ByRef CancelDefault As Boolean) Handles
CaseDatesTextMenuItem1.Click
MMPTag = applicationObject.ActiveCell()
MMPTag.Value2 = CaseDataDatesInsertText(1)
End Sub