我正在做一些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
没有开始。有没有其他方法可以这样做?我将不胜感激任何信息。
答案 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