动态禁用自定义(VBA)Excel上下文菜单按钮?

时间:2014-08-19 16:17:25

标签: excel vba excel-vba excel-2010 ribbonx

情景

大家好,我准备使用this MSDN page上的说明在Excel工作簿的单元格上下文菜单(不是功能区)中添加一些自定义控件。我唯一的问题是我需要只为特定列/单元格范围启用项目。

我环顾四周,而且我一直无法找到任何步骤 - 有一些用于VSTO开发(用C#编写),但这不是我需要的。我打算使用Office内置的VBA IDE编写这个,也许使用Custom UI Editor编写一些XML。


问题

所以基本上,我正在寻找一种方法来在调用上下文菜单时(即,在右键单击时)运行一个函数,该函数验证选择以确保它在适当的列中。如果不是,我希望我的自定义按钮显示为灰色。 注意:根本无法使用验证功能,老实说,我没有任何线索。如果有更好的方法,请随意分享(我愿意接受建议)。


P.S。

请不要以为我要求你写我的代码。创建这些按钮应该非常简单,因为我之前创建了很多按钮(尽管它们都是Ribbon项目),我希望可以在这个非常具体的问题上寻求快速帮助。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

Option Explicit

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

Dim rclk As CommandBarControl

If Target.Address(RowAbsolute:=False) = "$A1" Then
    Set rclk = Application.CommandBars("Cell").FindControl(Tag:="RightClickMenu1")
    With rclk
        .Enabled = False
    End With
Else
    Set rclk = Application.CommandBars("Cell").FindControl(Tag:="RightClickMenu1")
    With rclk
        .Enabled = True
    End With
End If

End Sub

“RightClickMenu1”是在Workbook_Open()中创建的,除此之外我认为代码不言自明。