Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / Excel / Programming / February 2007

Tip: Looking for answers? Try searching our database.

Customize the right-click menu

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
quartz - 12 Apr 2005 16:51 GMT
I am using Office 2003 on Windows XP.

I just want to add a single custom control as the first choice on Excel's
built-in right-click shortcut spreadsheet menu ("Cell").

I want all the functions to work as normal, but I only want it to work in
the current file. Since changing the menu affects all files, I think the menu
needs to be rebuilt with my custom control (a button) at the top.

Can anyone offer any suggestions on how to do this? Please post example code.
Doug Glancy - 12 Apr 2005 20:27 GMT
quartz,

Here' how I do it:

In the ThisWorkBook module add these three procedures:

Private Sub Workbook_Open()
Call AddShortcutMenuItems 'install custom menu items
End Sub

Private Sub Workbook_Activate()
Call AddShortcutMenuItems 'install custom menu items
End Sub

Private Sub Workbook_Deactivate()
Call DeleteShortcutMenuItems ' when closing or moving to other workbook, if
close cancelled then this doesn't happen
End Sub

Now in a regular module, add these two procedures.  I'd call this module
something like MenuMacros:

Sub AddShortcutMenuItems()
Dim new_menu_item As CommandBarButton
Dim i As Integer

Call DeleteShortcutMenuItems 'in case the items already there

'Add items to the Cell shortcut menu
With Application.CommandBars("Cell")
   Set new_menu_item = .Controls.Add(Type:=msoControlButton, before:=1)
   With new_menu_item
       .Caption = "&Test Button"
       .OnAction = "test_button_macro"
       .Style = msoButtonIconAndCaption
       .FaceId = 8
   End With
End With
End Sub

Sub DeleteShortcutMenuItems()

On Error Resume Next 'in case the item isn't there

With Application.CommandBars("Cell")
   .Controls("&Test Button").Delete
End With
End Sub

Now add the button click procedure - I'd do it in a 3rd module but it could
be in the menu module too:

Sub test_button_macro()
   msgbox "testing"
End Sub

hth,

Doug

> I am using Office 2003 on Windows XP.
>
[quoted text clipped - 6 lines]
>
> Can anyone offer any suggestions on how to do this? Please post example code.
Gary Brown - 12 Apr 2005 20:32 GMT
In the 'ThisWorkbook' module of your file put...
'/==================================================/
Private Sub Workbook_Activate()
 'create menu item on at top of Cell menu
 '     [Right click on a cell]
 Dim cbcMenuItem As CommandBarControl
 On Error Resume Next
 
 Set cbcMenuItem = _
   Application.CommandBars("CELL").Controls. _
   Add(Type:=1, Before:=1, Temporary:=True)
   'Type 1 = msoControlButton
 
 With cbcMenuItem
   .Caption = "&My_Menu_Item"
   .OnAction = ThisWorkbook.Name & "!My_Macro"
 End With
 
 Set cbcMenuItem = Nothing

End Sub

'/==================================================/
Private Sub Workbook_Deactivate()
 'delete menu item on Cell menu
 Dim strCaption As String
 
 On Error Resume Next
 
 strCaption = "&My_Menu_Item"
 
 Application.CommandBars("CELL"). _
   Controls(strCaption).Delete

End Sub
'/==================================================/

In a regular module, put your macro
Example:
'/==================================================/
Public Sub My_Macro()
 MsgBox "Hello"
End Sub
'/==================================================/

- - - - -
Items that you can change.
   Caption of  "&My_Menu_Item" can be changed to anything you want
   OnAction points to the macro in the regular module.  You can change
'My_Macro' to something else

HTH,
Gary Brown

> I am using Office 2003 on Windows XP.
>
[quoted text clipped - 6 lines]
>
> Can anyone offer any suggestions on how to do this? Please post example code.
quartz - 12 Apr 2005 20:35 GMT
Thanks Gary! It works well. I took the liberty of just using the "Reset"
command when the workbook is deactivated rather than deleting the control
(the effect is the same).

Thanks much.

> In the 'ThisWorkbook' module of your file put...
> '/==================================================/
[quoted text clipped - 60 lines]
> >
> > Can anyone offer any suggestions on how to do this? Please post example code.
Gary Brown - 12 Apr 2005 22:12 GMT
The only issue with 'Reset' is when you have other customized button(s) on
your menu.  Resetting wipes out the other button(s) (of yours or from another
add-in).  It's kind of a shotgun approach.  Deleting the specific button is
the handgun approach.
Either method seems fine for what you want to do.
Good Luck.
Sincerely,
Gary Brown

> Thanks Gary! It works well. I took the liberty of just using the "Reset"
> command when the workbook is deactivated rather than deleting the control
[quoted text clipped - 66 lines]
> > >
> > > Can anyone offer any suggestions on how to do this? Please post example code.
Rafi - 14 Feb 2007 20:22 GMT
Gary,

I saw this posting and it does exactly what I need with one exception.  How
do I sort the list or place my special menu item in a certain position (i.e.
2nd from top)

Thanks

> In the 'ThisWorkbook' module of your file put...
> '/==================================================/
[quoted text clipped - 60 lines]
> >
> > Can anyone offer any suggestions on how to do this? Please post example code.
Gary Brown - 14 Feb 2007 22:48 GMT
Hi Rafi,

Change...
  Set cbcMenuItem = _
    Application.CommandBars("CELL").Controls. _
    Add(Type:=1, Before:=1, Temporary:=True)

To...
  Set cbcMenuItem = _
    Application.CommandBars("CELL").Controls. _
    Add(Type:=1, Before:=1, Temporary:=True, Before:=2)

Signature

HTH,
Gary Brown
gary.DeleteThis2SendMeAnEmail.Brown@kinneson.com
If this post was helpful to you, please select ''YES'' at the bottom of the
post.

> Gary,
>
[quoted text clipped - 68 lines]
> > >
> > > Can anyone offer any suggestions on how to do this? Please post example code.
Tom Ogilvy - 14 Feb 2007 23:31 GMT
There should be two Before Arguments?

Signature

Regards,
Tom Ogilvy

> Hi Rafi,
>
[quoted text clipped - 86 lines]
>> > > Can anyone offer any suggestions on how to do this? Please post
>> > > example code.
Gary Brown - 15 Feb 2007 15:51 GMT
Good catch Tom :O>

> > To...
> >   Set cbcMenuItem = _
> >     Application.CommandBars("CELL").Controls. _
> >     Add(Type:=1, Temporary:=True, Before:=2)

Signature

HTH,
Gary Brown
gary.DeleteThis2SendMeAnEmail.Brown@kinneson.com
If this post was helpful to you, please select ''YES'' at the bottom of the
post.

> There should be two Before Arguments?
>
[quoted text clipped - 88 lines]
> >> > > Can anyone offer any suggestions on how to do this? Please post
> >> > > example code.
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.