ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Identical menuitems referring to wrong workbook (https://www.excelbanter.com/excel-programming/289317-identical-menuitems-referring-wrong-workbook.html)

R Avery

Identical menuitems referring to wrong workbook
 
I have two add-ins that create their own menus. In fact, I use Walkenbach's
MenuMaker to do this. This problem happens when they are both installed and
loaded into memory.

I have a sub-menu in both custom menus that have the same captions and same
items, but refer to procedures only within the respective add-in; the
add-ins do not reference each other at all.

The problem is that when both menus exist, the submenuitems in both menus
call the *same* procedure. SubmenuItem 1 in Menu A and SubmenuItem 1 in
Menu B both call the procedure in Workbook A, even though the .OnAction
property refers to the correct (separate) workbooks.

I suspect that it has to do with the fact that the structure of the menu is
the same, and/or the name of the procedure it calls is the same. But why
does this happen? I have tried changing the procedure names in the
workbooks so that they are not identical, and this fixes the problem.... but
is there any other way around it?

Any help would be most appreciated.



Dave Peterson[_3_]

Identical menuitems referring to wrong workbook
 
How did you refer to the .onaction property?

..onaction = thisworkbook & "!mymacro"
or just
..onaction = "mymacro"

That's where I'd look first absent any code to check.

R Avery wrote:

I have two add-ins that create their own menus. In fact, I use Walkenbach's
MenuMaker to do this. This problem happens when they are both installed and
loaded into memory.

I have a sub-menu in both custom menus that have the same captions and same
items, but refer to procedures only within the respective add-in; the
add-ins do not reference each other at all.

The problem is that when both menus exist, the submenuitems in both menus
call the *same* procedure. SubmenuItem 1 in Menu A and SubmenuItem 1 in
Menu B both call the procedure in Workbook A, even though the .OnAction
property refers to the correct (separate) workbooks.

I suspect that it has to do with the fact that the structure of the menu is
the same, and/or the name of the procedure it calls is the same. But why
does this happen? I have tried changing the procedure names in the
workbooks so that they are not identical, and this fixes the problem.... but
is there any other way around it?

Any help would be most appreciated.


--

Dave Peterson


R Avery

Identical menuitems referring to wrong workbook
 
The first way.

an example is:
..OnAction = "HistoryTracker.xla!GotoBookmark"



"Dave Peterson" wrote in message
...
How did you refer to the .onaction property?

.onaction = thisworkbook & "!mymacro"
or just
.onaction = "mymacro"

That's where I'd look first absent any code to check.

R Avery wrote:

I have two add-ins that create their own menus. In fact, I use

Walkenbach's
MenuMaker to do this. This problem happens when they are both installed

and
loaded into memory.

I have a sub-menu in both custom menus that have the same captions and

same
items, but refer to procedures only within the respective add-in; the
add-ins do not reference each other at all.

The problem is that when both menus exist, the submenuitems in both

menus
call the *same* procedure. SubmenuItem 1 in Menu A and SubmenuItem 1

in
Menu B both call the procedure in Workbook A, even though the

..OnAction
property refers to the correct (separate) workbooks.

I suspect that it has to do with the fact that the structure of the menu

is
the same, and/or the name of the procedure it calls is the same. But

why
does this happen? I have tried changing the procedure names in the
workbooks so that they are not identical, and this fixes the problem....

but
is there any other way around it?

Any help would be most appreciated.


--

Dave Peterson




Dave Peterson[_3_]

Identical menuitems referring to wrong workbook
 
first, a correction to my question:
..onaction = thisworkbook & "!mymacro"
should have been:
..onaction = thisworkbook.name & "!mymacro"

But I couldn't duplicate your experience.

I created two workbooks (book8.xls and book9.xls).

In book8.xls's project:

Option Explicit
Sub auto_open()
Call CreateMenu
End Sub
Sub auto_close()
Call DeleteMenu
End Sub
Sub CreateMenu()

Dim iCtr As Long
Dim myCtrl As CommandBarControl
Dim myBTN As CommandBarButton
Dim myCaptions As Variant
Dim myMacs As Variant

myCaptions = Array("test1a", "test1b")
myMacs = Array("test1a", "test1b")

Call DeleteMenu

Set myCtrl = Application.CommandBars(1).Controls.Add _
(Type:=msoControlPopup, _
befo=Application.CommandBars(1).Controls.Count, _
temporary:=True)
myCtrl.Caption = "test1"

For iCtr = LBound(myCaptions) To UBound(myCaptions)
Set myBTN = myCtrl.Controls.Add(Type:=msoControlButton, _
temporary:=True)
With myBTN
.OnAction = "book8.xls!" & myMacs(iCtr)
.Caption = myCaptions(iCtr)
.FaceId = 103
If iCtr Mod 3 = 2 Then
.BeginGroup = True
Else
.BeginGroup = False
End If
End With
Next iCtr

End Sub

Sub DeleteMenu()
On Error Resume Next
Application.CommandBars(1).Controls("test1").Delet e
On Error GoTo 0
End Sub

Sub test1a()
MsgBox ThisWorkbook.Name
End Sub
Sub test1b()
MsgBox ThisWorkbook.Name
End Sub

In book9.xls's project (very similar code):

Option Explicit
Sub auto_open()
Call CreateMenu
End Sub
Sub auto_close()
Call DeleteMenu
End Sub
Sub CreateMenu()

Dim iCtr As Long
Dim myCtrl As CommandBarControl
Dim myBTN As CommandBarButton
Dim myCaptions As Variant
Dim myMacs As Variant

myCaptions = Array("test1a", "test1b")
myMacs = Array("test1a", "test1b")

Call DeleteMenu

Set myCtrl = Application.CommandBars(1).Controls.Add _
(Type:=msoControlPopup, _
befo=Application.CommandBars(1).Controls.Count, _
temporary:=True)
myCtrl.Caption = "test2"

For iCtr = LBound(myCaptions) To UBound(myCaptions)
Set myBTN = myCtrl.Controls.Add(Type:=msoControlButton, _
temporary:=True)
With myBTN
.OnAction = "book9.xls!" & myMacs(iCtr)
.Caption = myCaptions(iCtr)
.FaceId = 103
If iCtr Mod 3 = 2 Then
.BeginGroup = True
Else
.BeginGroup = False
End If
End With
Next iCtr

End Sub

Sub DeleteMenu()
On Error Resume Next
Application.CommandBars(1).Controls("test2").Delet e
On Error GoTo 0
End Sub

Sub test1a()
MsgBox ThisWorkbook.Name
End Sub
Sub test1b()
MsgBox ThisWorkbook.Name
End Sub


===========
I hardcoded the names in the .onaction and it found the correct one each time.

Any chance that the toolbar is hanging around from before and always pointed to
the incorrect macro???




R Avery wrote:

The first way.

an example is:
.OnAction = "HistoryTracker.xla!GotoBookmark"

"Dave Peterson" wrote in message
...
How did you refer to the .onaction property?

.onaction = thisworkbook & "!mymacro"
or just
.onaction = "mymacro"

That's where I'd look first absent any code to check.

R Avery wrote:

I have two add-ins that create their own menus. In fact, I use

Walkenbach's
MenuMaker to do this. This problem happens when they are both installed

and
loaded into memory.

I have a sub-menu in both custom menus that have the same captions and

same
items, but refer to procedures only within the respective add-in; the
add-ins do not reference each other at all.

The problem is that when both menus exist, the submenuitems in both

menus
call the *same* procedure. SubmenuItem 1 in Menu A and SubmenuItem 1

in
Menu B both call the procedure in Workbook A, even though the

.OnAction
property refers to the correct (separate) workbooks.

I suspect that it has to do with the fact that the structure of the menu

is
the same, and/or the name of the procedure it calls is the same. But

why
does this happen? I have tried changing the procedure names in the
workbooks so that they are not identical, and this fixes the problem....

but
is there any other way around it?

Any help would be most appreciated.


--

Dave Peterson


--

Dave Peterson


R Avery

Identical menuitems referring to wrong workbook
 
I have recreated the problem, using your existing code almost exactly.
Save those two files as Add-ins, put them in the add-in folder, and load
them.
Before loading them you must change the workbook name in the code to ".xla"
instead.

By doing only that, I experience the problem i posted about.

For reference, I am using Excel10.

"Dave Peterson" wrote in message
...
first, a correction to my question:
.onaction = thisworkbook & "!mymacro"
should have been:
.onaction = thisworkbook.name & "!mymacro"

But I couldn't duplicate your experience.

I created two workbooks (book8.xls and book9.xls).

In book8.xls's project:

Option Explicit
Sub auto_open()
Call CreateMenu
End Sub
Sub auto_close()
Call DeleteMenu
End Sub
Sub CreateMenu()

Dim iCtr As Long
Dim myCtrl As CommandBarControl
Dim myBTN As CommandBarButton
Dim myCaptions As Variant
Dim myMacs As Variant

myCaptions = Array("test1a", "test1b")
myMacs = Array("test1a", "test1b")

Call DeleteMenu

Set myCtrl = Application.CommandBars(1).Controls.Add _
(Type:=msoControlPopup, _
befo=Application.CommandBars(1).Controls.Count, _
temporary:=True)
myCtrl.Caption = "test1"

For iCtr = LBound(myCaptions) To UBound(myCaptions)
Set myBTN = myCtrl.Controls.Add(Type:=msoControlButton, _
temporary:=True)
With myBTN
.OnAction = "book8.xls!" & myMacs(iCtr)
.Caption = myCaptions(iCtr)
.FaceId = 103
If iCtr Mod 3 = 2 Then
.BeginGroup = True
Else
.BeginGroup = False
End If
End With
Next iCtr

End Sub

Sub DeleteMenu()
On Error Resume Next
Application.CommandBars(1).Controls("test1").Delet e
On Error GoTo 0
End Sub

Sub test1a()
MsgBox ThisWorkbook.Name
End Sub
Sub test1b()
MsgBox ThisWorkbook.Name
End Sub

In book9.xls's project (very similar code):

Option Explicit
Sub auto_open()
Call CreateMenu
End Sub
Sub auto_close()
Call DeleteMenu
End Sub
Sub CreateMenu()

Dim iCtr As Long
Dim myCtrl As CommandBarControl
Dim myBTN As CommandBarButton
Dim myCaptions As Variant
Dim myMacs As Variant

myCaptions = Array("test1a", "test1b")
myMacs = Array("test1a", "test1b")

Call DeleteMenu

Set myCtrl = Application.CommandBars(1).Controls.Add _
(Type:=msoControlPopup, _
befo=Application.CommandBars(1).Controls.Count, _
temporary:=True)
myCtrl.Caption = "test2"

For iCtr = LBound(myCaptions) To UBound(myCaptions)
Set myBTN = myCtrl.Controls.Add(Type:=msoControlButton, _
temporary:=True)
With myBTN
.OnAction = "book9.xls!" & myMacs(iCtr)
.Caption = myCaptions(iCtr)
.FaceId = 103
If iCtr Mod 3 = 2 Then
.BeginGroup = True
Else
.BeginGroup = False
End If
End With
Next iCtr

End Sub

Sub DeleteMenu()
On Error Resume Next
Application.CommandBars(1).Controls("test2").Delet e
On Error GoTo 0
End Sub

Sub test1a()
MsgBox ThisWorkbook.Name
End Sub
Sub test1b()
MsgBox ThisWorkbook.Name
End Sub


===========
I hardcoded the names in the .onaction and it found the correct one each

time.

Any chance that the toolbar is hanging around from before and always

pointed to
the incorrect macro???




R Avery wrote:

The first way.

an example is:
.OnAction = "HistoryTracker.xla!GotoBookmark"

"Dave Peterson" wrote in message
...
How did you refer to the .onaction property?

.onaction = thisworkbook & "!mymacro"
or just
.onaction = "mymacro"

That's where I'd look first absent any code to check.

R Avery wrote:

I have two add-ins that create their own menus. In fact, I use

Walkenbach's
MenuMaker to do this. This problem happens when they are both

installed
and
loaded into memory.

I have a sub-menu in both custom menus that have the same captions

and
same
items, but refer to procedures only within the respective add-in;

the
add-ins do not reference each other at all.

The problem is that when both menus exist, the submenuitems in both

menus
call the *same* procedure. SubmenuItem 1 in Menu A and

SubmenuItem 1
in
Menu B both call the procedure in Workbook A, even though the

.OnAction
property refers to the correct (separate) workbooks.

I suspect that it has to do with the fact that the structure of the

menu
is
the same, and/or the name of the procedure it calls is the same.

But
why
does this happen? I have tried changing the procedure names in the
workbooks so that they are not identical, and this fixes the

problem....
but
is there any other way around it?

Any help would be most appreciated.

--

Dave Peterson


--

Dave Peterson




Dave Peterson[_3_]

Identical menuitems referring to wrong workbook
 
I missed that that example was an addin and the first sentence in your original
post, too! (sorry) I used .xls and didn't have the trouble.

But I could duplicate the problem if I used .xla's.

It looks like a bug to me, but maybe it's by design <bg.

I think the workaround is to use unique names. But you knew that already.

(also xl2002)



R Avery wrote:

I have recreated the problem, using your existing code almost exactly.
Save those two files as Add-ins, put them in the add-in folder, and load
them.
Before loading them you must change the workbook name in the code to ".xla"
instead.

By doing only that, I experience the problem i posted about.

For reference, I am using Excel10.

"Dave Peterson" wrote in message
...
first, a correction to my question:
.onaction = thisworkbook & "!mymacro"
should have been:
.onaction = thisworkbook.name & "!mymacro"

But I couldn't duplicate your experience.

I created two workbooks (book8.xls and book9.xls).

In book8.xls's project:

Option Explicit
Sub auto_open()
Call CreateMenu
End Sub
Sub auto_close()
Call DeleteMenu
End Sub
Sub CreateMenu()

Dim iCtr As Long
Dim myCtrl As CommandBarControl
Dim myBTN As CommandBarButton
Dim myCaptions As Variant
Dim myMacs As Variant

myCaptions = Array("test1a", "test1b")
myMacs = Array("test1a", "test1b")

Call DeleteMenu

Set myCtrl = Application.CommandBars(1).Controls.Add _
(Type:=msoControlPopup, _
befo=Application.CommandBars(1).Controls.Count, _
temporary:=True)
myCtrl.Caption = "test1"

For iCtr = LBound(myCaptions) To UBound(myCaptions)
Set myBTN = myCtrl.Controls.Add(Type:=msoControlButton, _
temporary:=True)
With myBTN
.OnAction = "book8.xls!" & myMacs(iCtr)
.Caption = myCaptions(iCtr)
.FaceId = 103
If iCtr Mod 3 = 2 Then
.BeginGroup = True
Else
.BeginGroup = False
End If
End With
Next iCtr

End Sub

Sub DeleteMenu()
On Error Resume Next
Application.CommandBars(1).Controls("test1").Delet e
On Error GoTo 0
End Sub

Sub test1a()
MsgBox ThisWorkbook.Name
End Sub
Sub test1b()
MsgBox ThisWorkbook.Name
End Sub

In book9.xls's project (very similar code):

Option Explicit
Sub auto_open()
Call CreateMenu
End Sub
Sub auto_close()
Call DeleteMenu
End Sub
Sub CreateMenu()

Dim iCtr As Long
Dim myCtrl As CommandBarControl
Dim myBTN As CommandBarButton
Dim myCaptions As Variant
Dim myMacs As Variant

myCaptions = Array("test1a", "test1b")
myMacs = Array("test1a", "test1b")

Call DeleteMenu

Set myCtrl = Application.CommandBars(1).Controls.Add _
(Type:=msoControlPopup, _
befo=Application.CommandBars(1).Controls.Count, _
temporary:=True)
myCtrl.Caption = "test2"

For iCtr = LBound(myCaptions) To UBound(myCaptions)
Set myBTN = myCtrl.Controls.Add(Type:=msoControlButton, _
temporary:=True)
With myBTN
.OnAction = "book9.xls!" & myMacs(iCtr)
.Caption = myCaptions(iCtr)
.FaceId = 103
If iCtr Mod 3 = 2 Then
.BeginGroup = True
Else
.BeginGroup = False
End If
End With
Next iCtr

End Sub

Sub DeleteMenu()
On Error Resume Next
Application.CommandBars(1).Controls("test2").Delet e
On Error GoTo 0
End Sub

Sub test1a()
MsgBox ThisWorkbook.Name
End Sub
Sub test1b()
MsgBox ThisWorkbook.Name
End Sub


===========
I hardcoded the names in the .onaction and it found the correct one each

time.

Any chance that the toolbar is hanging around from before and always

pointed to
the incorrect macro???




R Avery wrote:

The first way.

an example is:
.OnAction = "HistoryTracker.xla!GotoBookmark"

"Dave Peterson" wrote in message
...
How did you refer to the .onaction property?

.onaction = thisworkbook & "!mymacro"
or just
.onaction = "mymacro"

That's where I'd look first absent any code to check.

R Avery wrote:

I have two add-ins that create their own menus. In fact, I use
Walkenbach's
MenuMaker to do this. This problem happens when they are both

installed
and
loaded into memory.

I have a sub-menu in both custom menus that have the same captions

and
same
items, but refer to procedures only within the respective add-in;

the
add-ins do not reference each other at all.

The problem is that when both menus exist, the submenuitems in both
menus
call the *same* procedure. SubmenuItem 1 in Menu A and

SubmenuItem 1
in
Menu B both call the procedure in Workbook A, even though the
.OnAction
property refers to the correct (separate) workbooks.

I suspect that it has to do with the fact that the structure of the

menu
is
the same, and/or the name of the procedure it calls is the same.

But
why
does this happen? I have tried changing the procedure names in the
workbooks so that they are not identical, and this fixes the

problem....
but
is there any other way around it?

Any help would be most appreciated.

--

Dave Peterson


--

Dave Peterson


--

Dave Peterson



All times are GMT +1. The time now is 10:00 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com