【问题标题】:Add a function from the default Right-Click Context Menu into a custom context menu?将默认右键单击上下文菜单中的功能添加到自定义上下文菜单中?
【发布时间】:2016-03-05 11:01:30
【问题描述】:

有没有办法访问所有内置单元格上下文菜单功能的代码?

我特别希望从 RightClick 上下文菜单中运行“AddComment”功能 - 但我已经构建了一个自定义上下文菜单。

它所做的不仅仅是添加评论。它打开评论并添加我的名字并选择它。很好,我想在自定义上下文菜单中应用该功能。所以我要么需要保留该函数的代码,要么从我的自定义上下文菜单中“调用”函数本身。

编辑: 我想我需要更具体一些:

  • 称为“插入注释”的标准操作位于单元格右键单击上下文菜单中。
  • 我想将该函数复制到我自己的(自定义)右键单击上下文菜单中。
  • 有没有什么地方可以看到excel中所有内置函数的实际代码?例如,我说的是这些右键单击功能。

所以,我不想劫持上下文菜单。我想使用它!但是我已经创建了一个自定义的右键单击上下文菜单,我想从原始的右键单击上下文菜单中插入一个功能。

【问题讨论】:

  • 在CommandBars("Cell") 对象中创建一个按钮并将您的例程分配给.OnAction 属性。 msdn.microsoft.com/en-us/library/office/…
  • @Ambie,很好的建议!我希望您不介意我在修订我的答案时为此整理了示例代码,因为我起初错过了对 OP 的理解。如果您想将此作为答案发布,我可以删除我的。

标签: excel vba custom-contextmenu


【解决方案1】:

您应该能够使用 VBA 从普通单元格上下文菜单中执行几乎所有操作。如果您使用录制宏,则可以单击菜单然后查看代码以查看录制的内容。例如,插入注释的宏录制会产生此代码....

Range("A1").Select
Range("A1").AddComment
Range("A1").Comment.Visible = False
Range("A1").Comment.Text Text:="Your Name:" & Chr(10) & ""

编辑
我想我最初错过了将 OP 理解为询问如何获取默认上下文菜单操作的相应 VBA 代码。我认为实际上要问的是如何“劫持”内置上下文菜单操作本身。正如 Ambie 评论的那样,这可以如下所示完成。

Sub HijackContextMenuInsertComment()
    Dim ContextMenu As CommandBar
    Set ContextMenu = Application.CommandBars("Cell")
    ContextMenu.Controls.Item(13).OnAction = "Test"
End Sub
Sub Test()
    MsgBox "I've been hijacked"
End Sub

【讨论】:

  • 实际上,该函数选择了评论,插入我的名字(粗体),突出显示它并将光标放在评论的末尾 - 准备好实际写评论了。您的建议仅插入评论。有很大的不同。
  • @TAKL 对不起,我错过了 OP。请参阅修订版,了解我现在要问的内容。
  • 您从一开始就走在正确的轨道上。但是,我不想为我想要使用的每个操作都记录一个宏。我想使用那个确切的操作! “插入评论”的操作是这样的: - 插入评论 - 显示评论 - 以粗体插入我的名字和 Chr(10) - 将光标放在我的名字后面,准备写评论。描述我想要做的另一种方式是: - 我想调用“插入评论”操作。我不想模仿它,我想使用那个确切的。有关更多详细信息,请参阅下面我可能的解决方法(答案)。希望你能理解。
【解决方案2】:

可能的解决方法:

一步一步:

  • 使用默认上下文菜单
  • 删除除“插入评论”之外的所有项目
  • 向上下文菜单添加自定义函数
  • 现在我应该拥有自己的所有功能和“插入评论”功能。

为了完成这项工作,我只是添加了以下代码:

Dim Cnt As CommandBarControl
With Application.CommandBars("Cell")
    For Each Cnt In .Controls
        If InStr(1, Cnt.Caption, "Infoga ko") = 0 Then Cnt.Delete
    Next Cnt
End with

请注意,每种语言的标题都不同。我有瑞典语,所以在英语中它可能与“Insert c”而不是“Infoga ko”一起使用。

为了获得正确的标题,您可以像这样循环所有控件:

For Each Cnt In .Controls
    Debug.Print Cnt.Caption
Next Cnt

运行此代码后,我将只剩下“插入注释”功能,然后我就可以开始添加自己的控件了!

更新: 不,这行不通。该功能不会运行。单击“插入评论”功能时没有任何反应。奇怪吗?

【讨论】:

    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多