在单元格上单击鼠标右键时,Excel为您提供了功能丰富的上下文菜单,该菜单使您可以执行许多操作。您可能想要向该上下文菜单添加一些功能,尤其是当它们是您经常使用的功能时。

不幸的是,您无法以与编辑其他菜单相同的方式来编辑上下文菜单-通过使用“工具”菜单中的“自定义”。相反,您必须通过VBA操作上下文菜单。

如果要将项目添加到右键单击单元格时出现的上下文菜单中,则可以使用以下代码:

Sub AddItemToContextMenu()

Dim cmdNew As CommandBarButton     Set cmdNew = CommandBars("cell").Controls.Add

With cmdNew         .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True     End With End Sub

您所需要做的就是将.Caption属性设置为您想要使用的任何菜单文本,然后更改.OnAction属性,使其指向您要使用的宏或命令。以后要删除菜单选项时,可以使用以下宏:

Sub RemoveContextMenuItem()

On Error Resume Next     CommandBars("cell").Controls("My Procedure").Delete End Sub

若要使用此方法,请将“我的过程”文本更改为在上一个宏的.Caption属性中使用的任何文本。万一先前未添加指定的宏项目,则在此宏中使用On Error语句。

通过稍微修改宏,您可以指定仅在右键单击特定单元格时才应添加“上下文”菜单。下面的宏检查是否单击了C10:E25范围内的单元格。如果是这样,它将在“上下文”菜单的末尾为您的过程添加一个菜单选项。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _   Cancel As Boolean)

Dim cmdNew As CommandBarButton

For Each icbc In Application.CommandBars("cell").Controls         If icbc.Tag = "brccm" Then icbc.Delete     Next icbc

If Not Application.Intersect(Target, Range("c10:e25")) _       Is Nothing Then         Set cmdNew = CommandBars("cell").Controls.Add         With cmdNew             .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True             .Tag = "brccm"

End With     End If End Sub

在VBA编辑器中,需要将此宏添加到要与其一起使用的特定工作表中。您需要做的就是双击该工作表,在Project Explorer(VBA编辑器的左上角)中,然后将其输入到该工作表的代码窗口中。

与早期的宏一样,您需要做的就是修改为.Caption和.OnAction属性指定的设置。另外,您可能想在添加菜单选项时更改被视为“有效”的单元格范围,只需将“ c:10:e25”范围规范更改为所需范围即可。您甚至可以使用命名范围来代替单元格范围,如果您的有效范围实际上是一组不连续的单元格,则这非常有用。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2064)适用于Microsoft Excel 97、2000、2002和2003。