Excel+;VBA:单击自选图形上方时更改右键单击菜单
我正在做一个小Excel+vba应用程序,我被卡住了。我知道使用Excel+;VBA:单击自选图形上方时更改右键单击菜单,vba,excel,Vba,Excel,我正在做一个小Excel+vba应用程序,我被卡住了。我知道使用 Application.CommandBars("Cell").Controls.* 我可以更改右键单击菜单,只显示特定单元格的特定选项(当然还有其他代码) 但是,当我在autoshape上方单击鼠标右键时,有没有办法更改菜单 我一直在用类似的东西 (...) 'checking autoshape position sh_le = sh.Left sh_to = sh.Top sh_ri = sh.Left + sh.Wid
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
(…)
'检查自选图形位置
sh_le=sh.左
sh_to=sh.顶部
sh_ri=sh左+sh宽
sh_do=sh顶部+sh高度
'检查单击的单元格位置
cc_le=左侧单元格
cc_to=单元顶部
cc_ri=单元格左+单元格宽
cc_do=天花板顶部+天花板高度
如果(sh_le=cc_do),则
'生成自定义菜单
如果结束
它看起来不错(至少我这么认为):-但当我在形状上方单击时,右键单击之前的
工作表没有启动。还有其他办法吗?如果您能提供任何信息,我将不胜感激。有一个未记录的特性,这意味着在您关闭并重新打开文件之前,此事件可能不会触发
试试看。有一个未记录的特性,这意味着在您关闭文件并重新打开它之前,此事件可能不会触发
试试看。我是这样实现的。
如代码OnAction=“openOrder”中所示,其中openOrder是执行此任务的公共模块
您可以将命令栏(“单元格”)控件更改为命令栏(“形状”)。控件
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
我已经用这种方式实现了。
如代码OnAction=“openOrder”中所示,其中openOrder是执行此任务的公共模块
您可以将命令栏(“单元格”)控件更改为命令栏(“形状”)。控件
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