【问题标题】:Dynamically disable custom (VBA) Excel context menu buttons?动态禁用自定义 (VBA) Excel 上下文菜单按钮?
【发布时间】:2014-08-19 16:17:24
【问题描述】:

情景

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

我环顾四周,找不到任何步骤——有一些用于 VSTO 开发(用 C# 编写),但这不是我需要的。我计划使用 Office 中内置的 VBA IDE 编写此代码,并且可能使用Custom UI Editor 编写一些 XML。


问题

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


附言

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

提前谢谢你!

【问题讨论】:

    标签: vba excel excel-2010 ribbonx


    【解决方案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() 中创建的,除了我认为该代码是不言自明的。

    【讨论】:

    • 看起来可行。就像我说的,我还没有写代码,但是当我写的时候,如果它有效,我会把它标记为完成。
    • 你也可以使用Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多