【问题标题】:Excel VBA: Right click on a shape and add a new menu itemExcel VBA:右键单击形状并添加新菜单项
【发布时间】:2013-12-12 09:56:36
【问题描述】:

我在 Windows XP 机器上使用 Excel 2007。 在我的工作表上,我有很多“形状”(矩形)。

我已将宏分配给形状,以便它们在有人点击它们时执行任务。

我想做的是以下,但我读过帖子说这是不可能的。

  • 当有人右键单击某个形状时,是否可以添加新的菜单项?

当有人右键单击单元格时很容易做到这一点,但形状看起来不同。

我知道工作表有一个名为“Worksheet_BeforeRightClick”的事件,但是当我右键单击一个形状时,我无法让它工作。

下面是我的代码的开头,但它对我的菜单没有任何影响。

提前致谢

With Application.CommandBars("Shapes")
    With .Controls.Add
        .Caption = "My New Menu Item"
        .BeginGroup = True
        .OnAction = "MyNewMacro"
    End With
End With

【问题讨论】:

  • this也许你可以玩弄代码并让它工作:)
  • 您可以将这种代码附加到右键单击形状为Worksheet_BeforeRightClick(ByVal Target As Shape, Cancel As Boolean),然后根据If IsInArray(Target, YourRangeArray) Then ... 等范围数组检查目标。 仍然这会引发问题,因为当您右键单击其他任何内容(例如单元格)时,如果没有伴随某种错误捕获,例如 On Error Resume Next

标签: vba excel excel-2007 right-click


【解决方案1】:

据我了解,您想添加一个宏,该宏在运行时会创建另一个形状 (?)。如果这是真的,你可以运行类似的东西:

Sub AddShape ()
Sheets("YourSheetName").Shapes.AddShape(msoShapeRectangle, 35.25, 30.75, 121.5, 51.75).Select
'Add some additional info like name and style, or even attach another macro to it:    
Selection.ShapeRange.Name = "Test_Name"
Selection.ShapeRange.ShapeStyle = msoShapeStylePreset36
Selection.OnAction = "Testmacro"
End Sub

Sub TestMacro
MsgBox "Hello"    
EndSub

【讨论】:

  • 不完全。我想右键单击现有形状并将新项目添加到菜单中。我不想创建新形状。
  • @Eddie 我用谷歌搜索并测试了许多代码,但我无法让它们在形状上运行(在 Excel2010 上)。我会说此时不可能将它们添加到形状中。因此,即使Application.CommandBars("Shapes") 看起来像是 VBA 的内置功能,它也不会触发任何东西。一种解决方法是创建一个基于子菜单的“形状”按钮。第一个选项是原始宏,其他选项是您的 CommandBars 选项 (?)
猜你喜欢
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
相关资源
最近更新 更多