VBA详细快捷菜单

时间:2012-06-27 16:31:24

标签: ms-access vba menu ms-access-2010

我正在更新一些旧的VBA代码以使用Access 2010.我们遇到的一个问题是,当您右键单击时不会出现快捷菜单,因此我们创建一个快捷菜单并将其绑定到Application对象,就像这样...

Application.ShortcutMenuBar = "GeneralClipboardMenu"

一般情况下,如果您右键单击“详细信息”窗格中的列“我们将其用作Excel网格”,则不会显示任何菜单。这方面对我们的应用程序的使用至关重要,因此我们不能忽视它。

代码中没有任何地方禁用快捷菜单。此外,我意识到快捷菜单正在被2010 Office套装中的功能区取代,但是右键单击是我们理想的基本功能。

非常感谢任何帮助。以下是创建快捷菜单的代码,以便它是相关的。

Sub CreateSimpleShortcutMenu()
  On Error Resume Next 'If menu with same name exists delete
  CommandBars("GeneralClipboardMenu").Delete
  Dim cmb As CommandBar
  Set cmb = CommandBars.Add("GeneralClipboardMenu", msoBarPopup, False, False)
      With cmb
          .Controls.Add msoControlButton, 21, , , True   ' Cut
          .Controls.Add msoControlButton, 19, , , True   ' Copy
          .Controls.Add msoControlButton, 22, , , True   ' Paste
          .Controls.Add msoControlButton, 4016, , , True 'Sort Ascending
          .Controls.Add msoControlButton, 4017, , , True 'Sort Decending
      End With
  Set cmb = Nothing
End Sub

3 个答案:

答案 0 :(得分:1)

我认为应用程序范围的快捷菜单栏是DAO数据库属性。您可以在Access Options>下的GUI中进行更改。当前数据库>功能区和工具栏选项。

您还可以使用以下代码更改它:

UpdateCustomProperty("StartupShortcutMenuBar", "NameOfMyCustomShortcutMenuBar")

Private Function CreateCustomProperty(ByVal sPropertyName As String, _
                                        ByVal sPropertyValue As String)
    On Error Resume Next

    If sPropertyName <> "" And sPropertyValue <> "" Then
        Dim p1 As DAO.Property
        Set p1 = CurrentDb.CreateProperty(sPropertyName, DB_TEXT, sPropertyValue)
        CurrentDb.Properties.Append p1
        Set p1 = Nothing
    End If

End Function

Public Function UpdateCustomProperty(ByVal sPropertyName As String, _
                                    ByVal sPropertyValue As String)
    On Error Resume Next

    If sPropertyName <> "" And sPropertyValue <> "" Then
        CurrentDb.Properties(sPropertyName) = sPropertyValue
        If Err.Number = 3270 Then
            Err.Clear
            Call CreateCustomProperty(sPropertyName, sPropertyValue)
        End If
    End If
    Err.Clear
End Function

答案 1 :(得分:1)

实际上我发现了一种令人满意的解决方法。我们需要能够右键单击列的唯一原因是进行排序。使用我最初使用的代码,当您右键单击一个单元格时,排序选项显示为灰色。然而,似乎有几个用于排序命令的id,它们都具有不同的功能。

http://support.microsoft.com/kb/159466

上面的链接有一个快捷菜单的可用ID列表。

我很确定无法在2010年详细信息窗格中为整列添加右键单击功能。我没有通过搜索任何能够执行此操作的命令以及对我的属性进行三重检查来禁用我执行的菜单。

答案 2 :(得分:0)

一种可能性是表单属性中的快捷菜单设置为“否”。您可以通过在设计视图中查看表单,然后查看表单属性,并选中“快捷菜单”设置来访问它们。它应设置为“是”。