代码之家  ›  专栏  ›  技术社区  ›  praavDa

Excel+VBA:单击自选图形上方时更改右键单击菜单

  •  1
  • praavDa  · 技术社区  · 17 年前

    我正在做一个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 回复  |  直到 11 年前
        1
  •  0
  •   THEn    17 年前

    我已经用这种方式实现了。 和代码一样 onAction=“打开订单” 哪里 开放秩序 是做这项工作的公共模块。

    你可以改变 命令栏(“单元格”)。控件 到 命令栏(“形状”)。控件

    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
    
        2
  •  1
  •   Lunatik    17 年前

    有一个未记录的功能,这意味着在关闭并重新打开文件之前,此事件可能不会触发。

    试试看。

    推荐文章