menu bar keyboard shortcuts intermittent.

W

windsurferLA

I create a custom menu using the routine shown at the bottom of this
message which was generously created by individual unknown to whom I am
indebted to making my life easier.

When the macro is run, the menu bar shows across the top of the sheet:

File with an underline under the F
Edit with an underline under the E
.....
....
....
Actions List with an underline under the L

Prior to my machine crashing and reloading of the operating system,
depressing Alt-L opened the "Actions List" pull down menu. Now I usually
have to press Alt-L followed by "Enter" to get the same operation. The
standard menu items, File, Edit, View, Insert ... continue to open
merely by the appropriate Alt-letter combination.

Earlier today, for an unknown reason, Alt-L was opening the Action-List
pull down menu. This evening it again doesn't work.

WHAT MIGHT BE CHANGING?

Thanks ... WindsurferLA

- - - - - - - -

Sub CreateMenu()
' This sub should be executed when the workbook is opened.
' NOTE: There is no error handling in this subroutine

Dim MenuSheet As Worksheet
Dim MenuObject As CommandBarPopup

Dim MenuItem As Object
Dim SubMenuItem As CommandBarButton
Dim Row As Integer
Dim MenuLevel, nextlevel, PositionOrMacro, Caption, Divider, FaceId

''''''''''''''''''''''''''''''''''''''''''''''''''''
' Location for menu data
Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
''''''''''''''''''''''''''''''''''''''''''''''''''''

' Make sure the menus aren't duplicated
Call DeleteMenu

' Initialize the row counter
Row = 2

' Add the menus, menu items and submenu items using
' data stored on MenuSheet

Do Until IsEmpty(MenuSheet.Cells(Row, 1))
With MenuSheet
MenuLevel = .Cells(Row, 1)
Caption = .Cells(Row, 2)
PositionOrMacro = .Cells(Row, 3)
Divider = .Cells(Row, 4)
FaceId = .Cells(Row, 5)
nextlevel = .Cells(Row + 1, 1)
End With

Select Case MenuLevel
Case 1 ' A Menu
' Add the top-level menu to the Worksheet CommandBar
Set MenuObject = Application.CommandBars(1). _
Controls.Add(Type:=msoControlPopup, _
Before:=PositionOrMacro, _
Temporary:=True)
MenuObject.Caption = Caption

Case 2 ' A Menu Item
If nextlevel = 3 Then
Set MenuItem =
MenuObject.Controls.Add(Type:=msoControlPopup)
Else
Set MenuItem =
MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.OnAction = PositionOrMacro
End If
MenuItem.Caption = Caption
If FaceId <> "" Then MenuItem.FaceId = FaceId
If Divider Then MenuItem.BeginGroup = True

Case 3 ' A SubMenu Item
Set SubMenuItem =
MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = Caption
SubMenuItem.OnAction = PositionOrMacro
If FaceId <> "" Then SubMenuItem.FaceId = FaceId
If Divider Then SubMenuItem.BeginGroup = True
End Select
Row = Row + 1
Loop
End Sub
 
P

papou

Hello
I haven't been through all of your code, so this is just a suggestion:
You are using "reserved" names as variables in your code ie:
Caption and FaceId (both existing properties in VBA)
I would recommend you amend these variables names with for example
"ItCaption" and "ItFaceId"

HTH
Cordially
Pascal
 
W

windsurferLA

I'm not an expert on Menu generating programs, but I would think that
you would have to use the "reserved" names. Caption and FaceID are not
just any variables, they are the representations that go in the menu
bar. Am I wrong?

WindsurferLA
 
P

papou

Hi
you would have to use the "reserved" names.
No, you should *always* avoid using reserved names in variables.
Caption and FaceID are not just any variables, they are the representations
that go in the menu bar.
I understand your confusion, but still they ARE variables.
These names (Caption and FaceId) are properties available via VBA.
When they are both used as properties and variables (see your code snippet
below) your code may not work properly.


HTH
Cordially
Pascal
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top