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

我正在做一个Excel + VBA的应用程序,我卡住了。 我知道使用

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

我可以改变右键单击菜单只显示特定单元格的具体选项(当然附加代码)。

但是当我点击鼠标右键autoshape时,有没有办法改变菜单?

我一直在使用类似的东西

 (...) '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 

它看起来不错(至less我觉得这样:)但是当我点击上面的形状时, Worksheet_BeforeRightClick没有启动。 还有其他的方法吗? 我会很感激任何信息。

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

您可以将CommandBars(“单元格”)。控件更改为CommandBars(“形状”)。控件

 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 

有一个未公开的特征,这意味着这个事件可能不会触发,直到你closures了文件并重新打开它。

试试看