Excel + VBA:单击上面的自动形状时更改右键菜单

时间:2009-03-16 08:54:06

标签: excel vba excel-vba

我正在做一些Excel + vba应用程序而且我遇到了困难。我知道使用

Application.CommandBars("Cell").Controls.* 

我可以更改右键菜单以仅显示特定单元格的特定选项(当然还有其他代码)。

但是当我在自动形状上方单击鼠标右键时,有没有办法更改菜单?

我一直在使用像

这样的东西
(...)
'checking autoshape position
sh_le = sh.Left
sh_to = sh.Top
sh_ri = sh.Left + sh.Width
sh_do = sh.Top + sh.Height

'checking clicked cell position
cc_le = cel.Left
cc_to = cel.Top
cc_ri = cel.Left + cel.Width
cc_do = cel.Top + cel.Height

If (sh_le <= cc_le) And (sh_to <= cc_to) And (sh_ri >= cc_ri) And (sh_do >= cc_do) Then  
 'build custom menu
end if

它看起来不错(至少我是这么认为:) - 但是当我点击上面的形状时,Worksheet_BeforeRightClick没有开始。有没有其他方法可以这样做?我将不胜感激任何信息。

2 个答案:

答案 0 :(得分:1)

有一个未记录的featurette,表示在您关闭文件并重新打开文件之前,此事件可能无法触发。

试一试。

答案 1 :(得分:0)

我已经实现了这种方式。 如代码 OnAction =“openOrder”,其中 openOrder 是公共模块来完成工作。

您可以将 CommandBars(“Cell”)。控件更改为 CommandBars(“Shapes”)。控件

Private Sub Workbook_Deactivate()
    On Error Resume Next
    Application.CommandBars("Cell").Controls("View order").Delete
    On Error GoTo 0
End Sub

        Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

        Dim cBut As CommandBarButton

        On Error Resume Next

        If IneedCustomMenu=TRUE Then
            On Error Resume Next
            Set cBut = Application.CommandBars("Cell").Controls.Add(Temporary:=True)
                With cBut
                   .Caption = "View order"
                   .Style = msoButtonCaption
                   .OnAction = "openOrder"
                End With
            On Error GoTo 0
        Else
               On Error Resume Next
               With Application
                        .CommandBars(Cell).Controls("View order").Delete
               End With
        End If
       End Sub