如何创建宏以在特定单元格上执行右键单击并从右键单击菜单中选择一个选项?

时间:2015-01-08 11:10:32

标签: excel vba excel-vba

我认为问题很清楚。我想在Excel 2007中设置一个宏来执行以下任务 (1)右键单击特定单元格,例如A1 (2)从右键菜单中选择(左键单击)一个选项。

我真正需要的是将此宏指定给命令按钮。

2 个答案:

答案 0 :(得分:1)

转到VBA代码编辑器(ALT + F11)并添加新模块(Insert-> Module),然后粘贴到代码下面:

Option Explicit

Public Const myBar As String = "MyPopupBar"


Sub CreatePopup()
Dim cmb As CommandBar
Dim ctr As CommandBarControl

DeletePopup

Set cmb = Application.CommandBars.Add(myBar, msoBarPopup)
Set ctr = cmb.Controls.Add(msoControlButton)

With ctr
    .Caption = "Click me"
    .OnAction = "ClickMe"
End With

cmb.ShowPopup

Set ctr = Nothing
Set cmb = Nothing

End Sub

Sub ClickMe()

    MsgBox "You clicked me!", vbInformation, "Wow!"

End Sub

Sub DeletePopup()

On Error Resume Next
Application.CommandBars(myBar).Delete

End Sub

现在,双击Sheet1模块并添加以下代码:

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
CreatePopup
Cancel = True
End Sub

这就是全部!

<强> [编辑]
您可以通过命令按钮调用弹出菜单,这样:

Application.CommandBars("TheNameOfCommandBarPopup").ShowPopup 

有关详细信息,请参阅:
Creating Popup Menus in All Versions of Excel
Customizing Context Menus in All Versions of Microsoft Excel

答案 1 :(得分:0)

只是一些建议,而不是完整的答案,但也许是一个良好的开端:

?application.commandbars("Cell").Controls(2).caption 'this is your 2nd action in right clic menu, can set it to a variable of type commandbarControl

&安培;复制

commandbars("Cell").Controls(2).execute 'will perform the action of what it is suposed to do when you clic it.

所以也许通过一个简单的测试(假设你知道Option会做什么):

with application.commandbars("Cell").Controls(2)
    if instr(1,.caption,"Copy")>0 then .execute
end with

编辑:如果选项2不是好选项,则可以用Long变量替换2并循环选项。 编辑2:我想,你知道如何选择一个特定的细胞,这实际上是一个简单的部分......